在MongoDB中将字符串转换为ObjectID

63
我正在使用Codeigniter和MongoDB开发API。数据库的某些部分以ObjectID格式保存了图像的ID,而不是字符串。现在我得到了一个字符串格式的ID,需要使用它查询数据库。如何将一个字符串“转换”为ObjectID,以便进行查询?
34234234234234234234

变成这样:

ObjectID("34234234234234234234")

3
MongoId不是Mongo REPL中的有效类型。 - Yoshua Wuyts
9个回答

61

使用 Mongoose:

var mongoose = require('mongoose');
var objectId = mongoose.Types.ObjectId('569ed8269353e9f4c51617aa');

使用本地驱动程序 (https://dev59.com/n2Ei5IYBdhLWcg3wptp_#21076589)

var ObjectId = require('mongodb').ObjectId;
doc._id = new ObjectId(doc._id); // wrap in ObjectID

4
使用原生驱动程序时,ObjectID 应该更改为 ObjectId - mc9

46

你只需要从mongo中导入ObjectId函数即可。

ObjectId = require('mongodb').ObjectID;

然后你可以像这样使用它:

ObjectId("34234234234234234234")

1
这个答案真的很有帮助! - Ajitej Kaushik
我得到了这个错误信息:“错误:ReferenceError:require未定义”。这是什么意思? - Mewtwo

6

如果你正在使用Meteor

var id = new Mongo.ObjectID("34234234234234234234");

4

现在在MongoDB 4.0及以上版本中,你可以将字符串转换为objectId。有一个新的功能可以从字符串ID转换为objectId。

你可以在这里查看文档 $toObjectId


1

如果您处于聚合状态,可以使用以下内容:

{
   $toObjectId: <expression>
}

哪个是一个快捷方式:
{ $convert: { input: <expression>, to: "objectId" } }

来自 MongoDB文档


0

(摘自问题)


我找到了一个解决方案。只需要这样做:

new MongoId('34234234234234234234');

0

最好使用

var mongodb = require(‘mongodb’); //this might have been defined at the beginning of your code.
//now use it
query = {_id:mongodb.ObjectId('569ed8269353e9f4c51617aa')};

其余部分不变。


-1
import { ObjectId } from 'mongodb'
const query  = {"_id":ObjectId(req.params.productId)}

-4

mongo DB 版本 v3.6.3

如何将字符串输入保存到 MongoDB ObjectId 在 express 控制器代码中

const mongoose = require('mongoose');
var ObjectId = require('mongodb').ObjectId;
user: mongoose.Types.ObjectId(req.body.user)
console.log(user, typeof(user))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接