我一直在努力通过MongoDB的 ID 过滤我的记录而没有成功。问题出在 $ oid
在 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 :(得分:10)
您的脚本存在的问题是您尝试将普通字符串"57603891dcba0f7813102b3f"
与ObjectId字符串进行比较
{
"$oid": "57603891dcba0f7813102b3f"
},
如果您使用的是Node.Js,请执行以下操作
1)从mongodb软件包导入ObjectId api
var ObjectId = require('mongodb').ObjectID;
2)在查询中将普通字符串转换为ObjectId
mycollection.find({_id:ObjectId("57603891dcba0f7813102b3f")},{},{},function(err, docs) {...}
顺便说一下,@ titi23发布的答案也有效。但我觉得ObjectId转换更清洁。
答案 1 :(得分:4)
您可以通过这种方式搜索mLab。
{
"_id": {
"$oid": "59b59b34852a9619b486634f"
}
}
但是你的javascript代码应该是,
uId = ObjectId("59b59b34852a9619b486634f")
User.findOne({"_id": uId}, function(err, user){
});
答案 2 :(得分:0)
请尝试以下方法: -
mycollection.find({"_id.$oid":"57603891dcba0f7813102b3f"},{},{},function(err, docs) {
console.log("record"+docs);
docs.each(function(err, doc) {
if(doc) {
console.log("record"+doc);
}
});
});