如果我将mongo文档ID作为字符串,如何将其作为_id查询?
是否可以正常执行.find({_id:'stringID'})
或者我是否需要先将其转换为bson对象?
答案 0 :(得分:22)
你的意思是你有一个ObjectId的24位十六进制数字字符串吗?
假设这就是你的意思,大多数驱动程序都有办法获取字符串并将其转换为ObjectId。在JavaScript中:
.find({_id:new ObjectId("4f91bfcfaa7c5687a0c686d4")})
已更新对节点本机驱动程序更有用(来自https://github.com/christkv/node-mongodb-native的文档):
// Get the objectID type
var ObjectID = require('mongodb').ObjectID;
var idString = '4e4e1638c85e808431000003';
collection.findOne({_id: new ObjectID(idString)}, console.log) // ok
collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined
答案 1 :(得分:1)
如果您的_id值是字符串,您可以像查询任何其他字段一样查询它们。 (请记住,如果要为_id设置自定义值,它们必须保持唯一,否则您将收到重复的键错误。)
以下是Mongo JS Shell中的一个示例:
> db.test.insert({_id:"stringID1"})
> db.test.insert({_id:"stringID2"})
> db.test.insert({_id:"stringID3"})
> db.test.find({_id:"stringID1"})
{ "_id" : "stringID1" }
>
这是你在找什么?我希望我没有误解你的问题!