我发现这个问题是针对 C# 和 Perl 回答的,但不是在本机界面中。我认为这会起作用:
db.theColl.find( { _id: ObjectId("4ecbe7f9e8c1c9092c000027") } )
查询未返回任何结果。我通过执行 db.theColl.find()
并获取 ObjectId 找到了 4ecbe7f9e8c1c9092c000027。该集合中有数千个对象。
我已经阅读了在 mongodb.org 网站上可以找到的所有页面,但没有找到。这只是一件奇怪的事情吗?这对我来说似乎很正常。
一点也不奇怪,人们总是这样做。确保集合名称正确(大小写很重要)并且 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 }
如果您使用的是 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'))
命令中使用这种方法也会删除文档。您需要像这样精确指定 db.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
find()
,而不是关于 findOneAndDelete()
。
您错过了插入双引号。确切的查询是
db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )
如果您正在使用 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});
我认为你最好写这样的东西:
db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")})
打开 mongo CLI 后,在正确的数据库上连接并授权。
以下示例显示了如何从名为“products”的集合中查找具有 _id=568c28fffc4be30d44d0398e 的文档:
db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")})
我刚刚遇到了这个问题,并且完全按照记录的方式进行操作,但仍然无法正常工作。
查看您的错误消息并确保您没有复制任何特殊字符。我收到错误消息
SyntaxError: illegal character @(shell):1:43
当我转到字符 43 时,它只是我的对象 ID 的开始,在开放引号之后,就像我粘贴它一样。我把光标放在那里并按退格键,当它应该删除开放引号时似乎没有发生任何事情。我再次按下退格键,它删除了打开的报价,然后我把报价放回去并执行了查询,它工作了,尽管看起来完全一样。
我在 WebMatrix 中进行开发并从控制台复制了对象 ID。每当您从 WebMatrix 中的控制台复制时,您可能会选择一些会导致错误的不可见字符。
在 MongoDB Stitch 函数中,可以使用 BSON 完成,如下所示:
为此,请使用 BSON 实用程序包中的 ObjectId
帮助程序,如下例所示:
var id = "5bb9e9f84186b222c8901149";
BSON.ObjectId(id);
要使用 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")
只需这样做:
db.getCollection('test').find('4ecbe7f9e8c1c9092c000027');
Mongo Shell
版本 3.2.7 开始,这对我不起作用。
不定期副业成功案例分享