如何在控制台中通过ObjectIdsearch对象?

我发现这个问题回答了C#和Perl,但不是在本机界面。 我认为这将工作:

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

查询返回没有结果。 我通过db.theColl.find()find了4ecbe7f9e8c1c9092c000027,并抓取了一个ObjectId。 该集合中有几千个对象。

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

一点也不奇怪,人们总是这样做。 确保集合名称正确(大小写很重要)并且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 } 

更容易,尤其是选项卡完成:

 db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c')) 

编辑:也适用于findOne命令更漂亮的输出。

如果您使用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}) 

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

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

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

一旦你打开mongo CLI,连接并授权在正确的数据库。

以下示例显示了如何使用名为“products”的集合中的_id = 568c28fffc4be30d44d0398e来查找文档 :

 db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")}) 

我刚刚遇到了这个问题,完全按照logging,它仍然没有工作。

看看你的错误信息,并确保你没有任何复制的特殊字符。我得到的错误

 SyntaxError: illegal character @(shell):1:43 

当我到达字符43时,这只是我的对象ID的开始,在打开引号之后,就像我粘贴的那样。我把光标放在那里,当退出公开引用时,什么都没有出现。 我再次回退,并删除了公开报价,然后我把报价回来执行查询,它的工作,尽pipe看起来完全一样。

我在WebMatrix中进行开发,并从控制台复制对象ID。 每当从WebMatrix中的控制台复制时,您都可能会拾取一些会导致错误的隐形字符。

要使用Objectid方法,您不需要导入它。 它已经在mongodb对象上了。

 var ObjectId = new db.ObjectId('58c85d1b7932a14c7a0a320d'); db.yourCollection.findOne({ _id: ObjectId }, function (err, info) { console.log(info) }); 

我想你最好写这样的东西:

 db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")}) 

简单地做:

 db.getCollection('test').find('4ecbe7f9e8c1c9092c000027');