在MongoDB分片集群中恢复数据库有什么特别之处?

我想将一个数据库从一个副本集迁移到另一个属于一个分片集群的数据库。 到目前为止,这个集群只有1个碎片,没有收集或数据库真的被分割。

我mododumped和恢复这个数据库。 从一个分片簇的mongos,我可以运行一个简单的查询,如find(),但包括如下投影的东西不再工作:

“find({”var1“:subvar},{”_ id“:0,”fld1“:1,”fld2“:1,”fld3“:1})。limit(1).sort(”_ id“,pymongo .DESCENDING)”

我收到以下错误信息:

数据库错误:必须在投影中有sorting键并将其删除

它必须是一个与分片有关的问题,因为我将这个数据库恢复到了一个独立的mongodb服务器,并且testing成功运行。

提前致谢,

格雷格。

这与mongorestore不成问题。 如果您在2.2以上的分片数据库中创build新的集合,则会看到相同的行为。

mongos> db.version() 2.2.6 mongos> db.foo.save({id:3, value:'c'}) mongos> db.foo.save({id:2, value:'b'}) mongos> db.foo.save({id:1, value:'a'}) mongos> db.foo.find({}, {id:0}).sort({id:1}) error: { "$err" : "have to have sort key in projection and removing it", "code" : 13431 } 

显然,2.0的行为是不同的。

 mongos> db.version() 2.0.9 mongos> db.foo.save({id:3, value:'c'}) mongos> db.foo.save({id:2, value:'b'}) mongos> db.foo.save({id:1, value:'a'}) mongos> db.foo.find({},{id:0}).sort({id:1}) { "_id" : ObjectId("523bd35dff9a7c468936efba"), "value" : "a" } { "_id" : ObjectId("523bd358ff9a7c468936efb9"), "value" : "b" } { "_id" : ObjectId("523bd352ff9a7c468936efb8"), "value" : "c" } 

我打开SERVER-10381查看是否这是预期的,如果你想跟随它。

编辑:这是预期的。 当查询通过mongos运行时,键值应该存在,以便各个分片的结果可以合并和sorting。 在2.2之前,单个碎片/非碎片集合的逻辑显然是不同的,但是为了一致性而改变了。

文件将被更新以反映他的限制。