在 mongoose 4.6.0 中将字符串转换为 ObjectId 失败

Posted

技术标签:

【中文标题】在 mongoose 4.6.0 中将字符串转换为 ObjectId 失败【英文标题】:Converting string to ObjectId is failing in mongoose 4.6.0 【发布时间】:2017-01-21 20:42:29 【问题描述】:

我正在尝试使用将字符串转换为 ObjectId

var body=;
var objId="57b40595866fdab90268321e";
body.id=mongoose.Types.ObjectId(objId);

myModel.collection.insert(body,function(err,data)
//causing err;
);

上面的代码在使用 mongoose 4.4.16 时工作正常,但是如果我将我的 mongoose 更新到最新版本(4.6.0)就会出现问题。

错误

  object [
  
    "_bsontype":"ObjectID",
    "id:"0":87,"1":180,"2":5,"3":235,"4":134,"5":111,"6":218,"7":185,"8":2,"9":104,"10":50,"11":111
 
] 
is not a valid ObjectId

【问题讨论】:

【参考方案1】:

我没有时间去尖峰,但如果我没记错的话,id 是一个简单的字符串,_id 是 ObjectId,即任一

body.id="57b40595866fdab90268321e"

body._id=mongoose.Types.ObjectId("57b40595866fdab90268321e");

也就是说,它必须是那个特定的ID吗?如果没有,你可以使用new myModel(),它会自动创建一个id。

【讨论】:

【参考方案2】:

插入新文档的正确方法是-

var newDocument = new myModel(
    _id: mongoose.Types.ObjectId("57b40595866fdab90268321e")
);

newDocument.save();

在你的情况下- 它停止工作,因为 mongoose 和 mongo 本机驱动程序版本之间的差异。

尽管您可以通过上面的示例执行此操作,或者,如果您仍想使用insert,您可以使用myModel.insertMany(通过传递对象而不是数组)

看这里 http://mongoosejs.com/docs/api.html#model_Model.insertMany

【讨论】:

以上是关于在 mongoose 4.6.0 中将字符串转换为 ObjectId 失败的主要内容,如果未能解决你的问题,请参考以下文章

无法在 NodeJS 中将字符串转换为 ObjectId

无法在 NodeJS 中将字符串转换为 ObjectId

是否可以在填充猫鼬中将缓冲区转换为 base64string?

Mongoose 拒绝将有效字符串转换为 ObjectId

Mongoose 拒绝将有效字符串转换为 ObjectId

如何在 Mongoose 中将 _id 设置为 db 文档?