2016-06-17 43 views
2

我一直在努力过滤我的记录ID从MongoDB没有成功。问题是与$ OID来自MLab的MongoDB:通过ID找不到工作

MLAB我的记录是这样的:

{ 
    "_id": { 
     "$oid": "57603891dcba0f7813102b3f" 
    }, 
    "age": 10, 
    "name": "john", 
    "answer": "3", 
} 

脚本为:

 mycollection.find({_id:"57603891dcba0f7813102b3f"},{},{},function(err, docs) { 
    console.log("record"+docs); 
    docs.each(function(err, doc) { 
     if(doc) { 
     console.log("record"+doc); 
     } 
    }); 
    }); 

有什么不对呢?任何想法家伙?

回答

0

尝试以下操作: -

mycollection.find({"_id.$oid":"57603891dcba0f7813102b3f"},{},{},function(err, docs) { 
console.log("record"+docs); 
docs.each(function(err, doc) { 
    if(doc) { 
    console.log("record"+doc); 
    } 
}); 
    }); 
+0

仍然不能与MLab连接 –

6

与你的脚本的问题是,你想如果你正在使用Node.js的一个正常的字符串"57603891dcba0f7813102b3f"比较用的ObjectId串

{ 
     "$oid": "57603891dcba0f7813102b3f" 
}, 

,这里是你可以做什么

1)从MongoDB包中导入ObjectId api

var ObjectId = require('mongodb').ObjectID; 

2)转换正常字符串的ObjectId在查询

mycollection.find({_id:ObjectId("57603891dcba0f7813102b3f")},{},{},function(err, docs) {...} 

顺便说一句,通过@发布titi23答案也适用。但是我发现ObjectId转换是一个更清洁的方法。

+0

这适用于我当地的mongoDb安装,但不适用于MLab连接。我仍然有一个空作为返回值... –

+0

你可以分享您的样本数据mLab实例吗? –

+0

样本文件是我自己对这个问题表示:{ “_id”:{ “$ OID”: “57603891dcba0f7813102b3f” }, “时代”:10, “名”: “约翰”, “答案“:”3“, }。插入到mlab中的任何新文档正在使用$ oid进行格式化。 –

1

您可以用这种方式在mLab上搜索。

{ 
    "_id": { 
     "$oid": "59b59b34852a9619b486634f" 
    } 
} 

但你的JavaScript代码应该是,

uId = ObjectId("59b59b34852a9619b486634f") 
User.findOne({"_id": uId}, function(err, user){ 
}); 
0

在本地开发的MongoDB服务器,在 “_id” 被索引并确定使用对象ID( “......”)。 例如,在本地查询时,你可能会得到

{ "_id": ObjectID("....") , "name": ".......", "password" : "............"} 

而在MLAB或远程服务器的MongoDB查询,该“_id”为“$ OID”引用。例如,

{ "_id": { "$oid": "..........."} , "name": "......."} 

如果你像我一样,你可以尝试在MLAB编辑文档的“_id”,并与后者取代前者描述,MLAB不会允许你做这样的,我认为这是部分限制。试试看看是否有任何解决方法可以共享。