Answers:
一点都不奇怪,人们一直在这样做。确保集合名称正确(区分大小写),并且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 }
如果您使用的是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)
import { ObjectId } from "mongodb";
适用于更高级的JS。
甚至更容易,尤其是在制表符完成时:
db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c'))
编辑:也可与findOne
用于更漂亮输出的命令一起使用。
db.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
db.test.findOneAndDelete(ObjectId('57eujhs76e7hs877e868'))
即使ObjectId与指定的ID不匹配,在命令中使用这种方法也会删除文档。您需要精确地指定db.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
find()
而不是关于findOneAndDelete()
。
您错过了插入双引号的操作。确切查询为
db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )
如果您正在使用mongo shell,请参考: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});
我只是遇到了这个问题,并按照记录的方式进行了工作,但仍然无法正常工作。
查看您的错误消息,并确保您没有复制任何特殊字符。
SyntaxError: illegal character @(shell):1:43
当我转到第43个字符时,它只是对象ID的开头,恰好是粘贴在开放引号之后的位置。我将光标放在此处,并按了退格键,应该删除开放引号时似乎没有任何反应。我再次按退格键,它删除了打开的引号,然后我将引号放回去并执行了查询,尽管看起来完全一样,但它仍然有效。
我正在WebMatrix中进行开发,并从控制台复制了对象ID。每当您从WebMatrix中的控制台复制时,都有可能拾取一些会导致错误的不可见字符。
打开mongo CLI后,将在正确的数据库上进行连接和授权。
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)
});
TypeError: db.ObjectId is not a function
ObjectId("SOMETHING")