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

时间:2011-11-22 20:02:27

标签: mongodb

我发现这个问题是针对C#和Perl的,但不是在本机界面中。我认为这样可行:

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

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

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

12 个答案:

答案 0 :(得分:332)

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

文档为here

> 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 }

答案 1 :(得分:72)

更简单,尤其是制表符完成时:

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

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

答案 2 :(得分:70)

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

答案 3 :(得分:13)

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

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

答案 4 :(得分:3)

我刚刚遇到了这个问题,并且完全按照记录的方式进行,但仍然无效。

查看您的错误消息并确保没有复制任何特殊字符。我收到错误

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

当我去角色43时,它只是我的对象ID的开头,在打开引号之后,就像我粘贴它一样。我把光标放在那里然后点击后退空间当它应该已经移除开放时似乎没有发生引用。我再次点击退格并删除了打开的引号,然后我把引号重新放入并执行了查询,尽管看起来完全相同,但仍然有效。

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

答案 5 :(得分:3)

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

  

以下示例显示如何使用名为“products”的集合中的_id = 568c28fffc4be30d44d0398e find the document

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

答案 6 :(得分:2)

如果您正在使用mongo shell,请参考:Answer from Tyler Brock

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

答案 7 :(得分:1)

我认为你最好这样写:

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

答案 8 :(得分:1)

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

为此,请使用BSON实用工具包中的ObjectId帮助程序,例如以下示例:

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

答案 9 :(得分:0)

如果您使用的是Node.js:

在那个req.user中是ObjectId格式。

var mongoose = require("mongoose");
var ObjectId = mongoose.Schema.Types.ObjectId;

function getUsers(req, res)
    User.findOne({"_id":req.user}, { password: 0 }) 
         .then(data => { 
             res.send(data);})g
}
exports.getUsers = getUsers;

答案 10 :(得分:-1)

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

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

答案 11 :(得分:-5)

简单地说:

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