在 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 失败的主要内容,如果未能解决你的问题,请参考以下文章