我如何通过它的ObjectId在mongo控制台搜索一个对象?

我发现这个问题在c#和Perl中都有答案,但在本机接口中没有。我觉得这样会有用:

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

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

我在mongodb.org网站上读了所有能找到的页面都没找到。这样做很奇怪吗?这对我来说很正常。

628288 次浏览

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

Edit:还与findOne命令一起工作,以获得更漂亮的输出。

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

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

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

编辑:修正为new ObjectId(id),而不是new ObjectId(id)

只是做的事:

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

我只是有这个问题,并完全按照文档做,但它仍然不工作。

查看错误消息,确保没有复制任何特殊字符。我得到了错误

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

当我转到第43号字符时,它只是我的对象ID的开始,在双引号之后,就像我粘贴进来的那样。我把光标放在那里,按退格键,当它应该删除开引号时,什么都没有发生。我再次按退格键,它删除了开引号,然后我把引号放回并执行查询,它工作了,尽管看起来完全相同。

我在WebMatrix中进行开发,并从控制台复制了对象id。无论何时在WebMatrix中从控制台复制,您都可能选择一些会导致错误的不可见字符。

打开mongo CLI后,在正确的数据库上连接和授权。

下面的例子展示了如何使用_id=568c28fffc4be30d44d0398e从名为" products "的集合中查找文档:

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

我觉得你最好这样写:

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

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

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

在MongoDB Stitch函数中,可以使用BSON完成,如下所示:

在BSON实用程序包中使用ObjectId帮助器来实现此目的,如下例所示:

var id = "5bb9e9f84186b222c8901149";
BSON.ObjectId(id);

如果你在mongo shell上工作,请参考这个:泰勒·布洛克回答

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

你不需要将id转换为ObjectId。只需使用:

db.collection.findById('4ecbe7f9e8c1c9092c000027');

这个收集方法会自动将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});