[英]If i have a mongo document id as a string how do I query for it as an _id?
如果我有一个 mongo 文档 id 作为字符串,我如何将它作为 _id 查询?
执行.find({_id:'stringID'})
会正常工作还是我需要先将其转换为 bson 对象?
您的意思是您有 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
如果您的 _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" }
>
这就是你要找的吗? 我希望我没有误解你的问题!
当您使用findByID
,Mongoose 会自动将字符串_id
转换为 ObjectId ,因此您可以使用字符串_id
进行查询。
还请记住,从req.body
或req.params
进入您的 API 的任何输入都将是 string 类型,因此您需要在需要时输入 cast...,但如上所述, req.params
会为您执行此操作,因此您只需留下_id
它以字符串格式出现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.