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

时间:2016-06-17 00:45:00

标签: javascript mongodb mlab

我一直在努力通过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);
      }
    });
  });

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

3 个答案:

答案 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);
  }
});
  });