MongoDB $oid 与 ObjectId

Posted

技术标签:

【中文标题】MongoDB $oid 与 ObjectId【英文标题】:MongoDB $oid vs ObjectId 【发布时间】:2015-01-12 08:27:38 【问题描述】:

我正在尝试让 mongodb 查询正常工作。集合的格式为:


"_id": 
    "$oid": "54651022bffebc03098b4567"
,
"browser": "ie",
"browser_version": "10.0 Desktop",
"os_version": "8",
"device": null,
"os": "Windows"

以下作品:


    "_id": 
        "$in": [
            
                "$oid": "54651022bffebc03098b4567"
            ,
            
                "$oid": "54651022bffebc03098b4568"
            
        ]
   

但是,我收到以下语法错误:


    "_id": 
        "$in": [
            ObjectId("54651022bffebc03098b4567"),
            ObjectId("54651022bffebc03098b4568")
        ]
    

有一个类似的问题表明 ObjectId 应该可以工作:

How to create query with ObjectIds using java?

$all parameter in mongodb does not work with ObjectId list

【问题讨论】:

您使用哪个客户端来输入和运行这些查询?蒙戈壳?一个Java程序? (您链接到底部的一篇 Java 文章。)虽然所有客户端的许多概念和细节都相似,但许多客户端都有自己的特殊怪癖,使它们与众不同。例如,我希望您的第三个代码块中的 ObjectId() 语法仅适用于 javascript(包括 mongo shell)。 等待您在 Java 中尝试这个?这不是你在 Java 中创建对象的方式 我在 Mongolab 浏览器中运行查询。我还尝试使用运行良好的 MongoId() 构造函数在 php 中运行相同的查询 【参考方案1】:

MongoLab UI 使用Strict MongoDB Extended JSON,因此对象 ID 是这样表示的,就像在 OP 的第二个代码块中一样:

 "$oid": "<id>" 

【讨论】:

以上是关于MongoDB $oid 与 ObjectId的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb findoneandupdate 与聚合管道

如何在 MongoDB 中找到“$oid”而不是 _id?

通过引用查询mongodb

mongodb找到多个参考文件

Mongodb 使用聚合框架过滤深度嵌套的数组

如何通过 $project 中提供的 _id 与 mongodb 聚合进行 $match?