如何通过控制台中的ObjectId搜索对象?

jco*_*lum 238 mongodb

我发现这个问题是针对C#和Perl的,但不是在本机界面中.我认为这会奏效:

db.theColl.find( { _id: ObjectId("4ecbe7f9e8c1c9092c000027") } )

查询未返回任何结果.我通过做db.theColl.find()和抓取ObjectId 找到了4ecbe7f9e8c1c9092c000027 .该集合中有数千个对象.

我已经阅读了我在mongodb.org网站上找到的所有页面,但没有找到它.这只是一件奇怪的事吗?这对我来说似乎很正常.

Tyl*_*ock 372

一点也不奇怪,人们总是这样做.确保集合名称正确(大小写很重要)并且ObjectId是准确的.

文档在这里

> db.test.insert({x: 1})

> db.test.find()                                               // no criteria
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }      

> db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }

> db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c"))           // shortcut
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }
Run Code Online (Sandbox Code Playgroud)

  • 哇,我不知道这是MongoDB中的一些特别的东西浪费了一点时间以为我的问题在其他地方,但找到它只需要额外的规则.对于使用express和node的人来说,需要使用ObjectId exp ... var ObjectId = require('mongodb').ObjectID; (7认同)

Mus*_*niz 80

如果您正在使用Node.js:

> var ObjectId = require('mongodb').ObjectId; 
> var id = req.params.gonderi_id;       
> var o_id = new ObjectId(id);
> db.test.find({_id:o_id})
Run Code Online (Sandbox Code Playgroud)

编辑:更正为新的ObjectId(id),而不是新的ObjectID(id)

  • `import { ObjectId } from "mongodb";` 适用于更高级的 JS。 (10认同)

MPl*_*ard 79

更容易,尤其是制表完成时:

db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c'))
Run Code Online (Sandbox Code Playgroud)

编辑:也可以使用findOne命令进行更漂亮的输出.


小智 17

您错过了插入双引号.精确查询是

db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )
Run Code Online (Sandbox Code Playgroud)


小智 9

我认为你最好写这样的东西:

db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")})
Run Code Online (Sandbox Code Playgroud)


sau*_*pta 9

如果您正在使用 mongo shell,请参考:来自 Tyler Brock 的回答

如果您使用 node.js 使用 mongodb,我写了答案

您不需要将 id 转换为ObjectId. 只需使用:

db.collection.findById('4ecbe7f9e8c1c9092c000027');
Run Code Online (Sandbox Code Playgroud)

这个集合方法会自动将id转换成ObjectId。

另一方面 :

db.collection.findOne({"_id":'4ecbe7f9e8c1c9092c000027'})没有按预期工作。您已手动将 id 转换为ObjectId.

可以这样做:

let id = '58c85d1b7932a14c7a0a320d';

let o_id = new ObjectId(id);   // id as a string is passed

db.collection.findOne({"_id":o_id});
Run Code Online (Sandbox Code Playgroud)

  • findById 应该是来自 mongoose 的函数/方法 - 它在内部将字符串转换为 ObjectId,除非您使用 mongoose,否则此代码不会帮助您,无论它是节点还是其他..!! (4认同)
  • 是的..我忘了提到猫鼬是必需的......谢谢您的更正 (2认同)

小智 5

打开 mongo CLI 后,即可连接并授权正确的数据库。

\n\n
\n

以下示例演示如何从名为 \xe2\x80\x9cproducts\xe2\x80\x9d 的集合中查找 _id=568c28fffc4be30d44d0398e 的文档:

\n
\n\n
db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")})\n
Run Code Online (Sandbox Code Playgroud)\n