繁体   English   中英

如果我有一个 mongo 文档 id 作为字符串,我如何将它作为 _id 查询?

[英]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.bodyreq.params进入您的 API 的任何输入都将是 string 类型,因此您需要在需要时输入 cast...,但如上所述, req.params会为您执行此操作,因此您只需留下_id它以字符串格式出现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM