caosiyang / py-mongo-sync

Oplog-based data sync tool that synchronizes data from a replica set to another deployment, e.g.: standalone, replica set, and sharded cluster.
http://caosiyang.github.io/py-mongo-sync/
MIT License
108 stars 46 forks source link

创建Partial Indexes索引报错 #23

Closed brzone closed 4 years ago

brzone commented 5 years ago

Mongodb环境: 3.4.2 使用的是:py-mongo-dev 使用的建立索引语句: db.notice.ensureIndex({"otherData.orderNo" : 1}, { partialFilterExpression: {"otherData.orderNo" :{"$exists" : true}} , "background" : true} );

然后报的异常是: 【nohup.out】文件报的异常: Traceback (most recent call last): File "./sync.py", line 14, in from mongosync.command_options import CommandOptions File "/data/soft/py-mongo-sync-dev/mongosync/command_options.py", line 5, in from mongosync.config_file import ConfigFile File "/data/soft/py-mongo-sync-dev/mongosync/config_file.py", line 1, in import toml ImportError: No module named toml Traceback (most recent call last): File "./sync.py", line 29, in syncer.run() File "/data/soft/py-mongo-sync-dev/mongosync/synchronizer.py", line 67, in run self._sync() File "/data/soft/py-mongo-sync-dev/mongosync/synchronizer.py", line 85, in _sync self._sync_oplog(oplog_start) File "/data/soft/py-mongo-sync-dev/mongosync/mongo_synchronizer.py", line 215, in _sync_oplog self._dst.replay_oplog(oplog) File "/data/soft/py-mongo-sync-dev/mongosync/db.py", line 169, in replay_oplog raise e bson.errors.InvalidDocument: key 'otherData.orderNo' must not contain '.'

【sync.log】文件报的异常: 2019-01-29 00:00:07,264 ERROR key 'otherData.orderNo' must not contain '.': SON([(u'ts', Timestamp(1548691207, 116)), (u't', 66L), (u'h', -721035070606281851L), (u'v', 2), (u'op', u'i'), (u'ns', u'xxxxxxxxxxx.system.indexes'), (u'o', SON([(u'v', 1), (u'key', SON([(u'otherData.orderNo', 1.0)])), (u'name', u'otherData.orderNo_1'), (u'ns', u'xxxxxxxxxxx.notice'), (u'partialFilterExpression', SON([(u'otherData.orderNo', SON([(u'$exists', True)]))])), (u'background', True), ('_id', ObjectId('5c4f270770620c36bc114ed8'))]))])

xxxxxxxxxxx是database.

猜想: 应该是您的代码对深层索引带点的解析有点小问题。 这个是在dev上进行测试,估计master应该也是有问题。 叨扰了。

caosiyang commented 5 years ago

看异常位置是在重放建索引的oplog时出错,我查下原因。