【问题标题】:MongoDB from MLab : find by ID not working来自 MLab 的 MongoDB:按 ID 查找不起作用
【发布时间】:2017-11-28 00:29:28
【问题描述】:

我一直在努力按 ID 从 MongoDB 过滤我的记录,但没有成功。问题在于 $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);
      }
    });
  });

这有什么问题?有什么想法吗?

【问题讨论】:

    标签: javascript mongodb mlab


    【解决方案1】:

    您的脚本的问题是您试图将普通字符串 "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 转换是一种更简洁的方法。

    【讨论】:

    • 这适用于我的本地 mongoDb 安装,但不适用于 MLab 连接。我仍然有一个 null 作为返回值...
    • 您可以分享您的 mLab 实例中的示例数据吗?
    • 我在这个问题上展示了一个示例文档:{ "_id": { "$oid": "57603891dcba0f7813102b3f" }, "age": 10, "name": "john", “答案”:“3”,}。在 mlab 中插入的任何新文档都使用 $oid 进行格式化。
    • 看来op的oid字段不是object id
    【解决方案2】:

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

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

    但是你的javascript代码应该是,

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

    【讨论】:

      【解决方案3】:

      尝试以下方法:-

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

      【讨论】:

        【解决方案4】:

        在您的本地开发 MongoDB 服务器上,“_id”使用 ObjectID("....") 进行索引和标识。 例如,在本地查询时可能会得到 ​​p>

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

        在 Mlab 或任何远程 mongodb 服务器中查询时,“_id”被引用为“$oid”。例如,

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

        如果你和我一样,你可以尝试在 MLab 中编辑文档的“_id”,并将前面的描述替换为后者,Mlab 不允许你这样做,我认为这是它的限制的一部分。尝试一下,看看您是否有任何解决方法可以分享。

        【讨论】:

          猜你喜欢
          • 2019-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-21
          • 2021-03-15
          • 1970-01-01
          相关资源
          最近更新 更多