【问题标题】:Converting string to ObjectId is failing in mongoose 4.6.0在 mongoose 4.6.0 中将字符串转换为 ObjectId 失败
【发布时间】: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

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2018-01-06
        • 1970-01-01
        • 2021-03-14
        • 2013-03-24
        • 2021-09-05
        • 2020-07-23
        • 2021-03-09
        • 1970-01-01
        • 2017-05-20
        相关资源
        最近更新 更多