如果您通过与部署不同的客户端插入文档,则可能会发生此错误。
从这里:
如果未指定 _id 字段,MongoDB 使用 ObjectIds 作为 _id 字段的默认值……如果客户端不添加 _id 字段,mongod 将添加一个包含 ObjectId 的 _id 字段。
尽管 mongoDB 创建的 ID 在已部署的仪表板中可见,但它们不是普通字符串(如 deployd 生成的 ID),并且 deployd 在查找字符串时找不到它们。
尝试使用任何其他 mongoDB 客户端(例如Robomongo)运行如下查询:
db.yourcollection.find({_id: ObjectId("some_id_you_know_exists_in_collection")})
如果它没有抛出错误,则 id 很可能是不是由 deployd 创建的 ObjectId。
不幸的是,没有简单的解决方法。(至少不适用于大型集合和复杂的应用程序。)对于小型集合,我建议将数据复制到新集合中并让部署创建新 ID。
快速、肮脏且未经测试:
dpd.collection.get({}, function(res) {
_.each(res, function(object){
object.oldId = object.id //add id backup
delete object.id
// post new object without id -> deployd creates a new id
dpd.newcollection.post(object, function(res, err) {
if(err) {
console.log(err);
};
if(res) {
console.log(res);
};
})
});
})
你必须自己决定这是否适合你。