来自MLab的MongoDB:通过ID找不到工作

sou*_*mie 4 javascript mongodb mlab

我一直在努力通过MongoDB中的ID过滤我的记录而没有成功.问题在于$ oid

MLAB上,我的记录如下:

    {
    "_id": {
        "$oid": "57603891dcba0f7813102b3f"
    },
    "age": 10,
    "name": "john",
    "answer": "3",
}
Run Code Online (Sandbox Code Playgroud)

我的剧本如下:

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

它有什么问题?任何想法的家伙?

Kav*_*ali 11

您的脚本的问题是您正在尝试将普通字符串"57603891dcba0f7813102b3f"与ObjectId字符串进行比较

{
        "$oid": "57603891dcba0f7813102b3f"
},
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Node.Js,那么您可以执行此操作

1)从mongodb包导入ObjectId api

 var ObjectId = require('mongodb').ObjectID;
Run Code Online (Sandbox Code Playgroud)

2)在查询中将普通字符串转换为ObjectId

mycollection.find({_id:ObjectId("57603891dcba0f7813102b3f")},{},{},function(err, docs) {...}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,@ titi23发布的答案也有效.但我发现ObjectId转换是一种更清洁的方法.


stt*_*stt 6

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

{
    "_id": {
        "$oid": "59b59b34852a9619b486634f"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是您的JavaScript代码应该是

uId = ObjectId("59b59b34852a9619b486634f")
User.findOne({"_id": uId}, function(err, user){
});
Run Code Online (Sandbox Code Playgroud)


Shr*_*nee 0

尝试以下操作:-

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