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

时间:2016-09-14 06:22:30

标签: node.js mongodb express mongoose

我正在尝试使用

将字符串转换为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),则会出现问题。

ERR

  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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我没有时间来刺激它,但如果我没记错的话,id是一个简单的字符串而_id是ObjectId,即

body.id="57b40595866fdab90268321e"

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

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