2014-12-10 86 views
0

快速之一:Mongoose更改文件_id保存/更新

为什么Mongoose在更新时更改/升级文档的_id字段? 这是一个预期的行为?

谢谢。

这是我在我的PUT路线内使用更新,并返回成功更新后的模型,但不幸的是一个新的_id为DOC

Document.findById(req.params.doc_id, function (err, doc) { 
    if (err) 
     res.send(err) 

    // Do some subdoc stuff here … 

    doc.save(function (err) { 
     if (!err) { 
      console.log('Success!'); 
      res.json(doc); 
     } else { 
      console.log(err); 
     } 

    }); 
}); 
+3

您确定这是更新吗?它不应该改变_id。这将更容易找出一些代码。 – 2014-12-10 21:47:52

+1

对不起有人投票给你,是不是我。 – earlonrails 2014-12-10 22:34:11

回答

1

好了,问题就解决了: 我登录了错误的_id (DOH!)

1

猫鼬文档http://mongoosejs.com/docs/2.7.x/docs/model-definition.html 建议使用updatefindOne

例如:

var query = { name: 'borne' }; 
Document.update({"_id": req.params.doc_id}, { name: 'jason borne' }, {}, function(err, numAffected){ 
    if (!err) { 
    console.log('Success!'); 
    res.json(numAffected); 
    } else { 
    console.log(err); 
    } 
}); 

Model.findOne({ "_id": req.params.doc_id }, function (err, doc){ 
    doc.name = 'jason borne'; 
    doc.save(); 
    // here you could use your save instead, but try not to use the doc again 
    // it is confusing 
    // doc.save(function (err, documentSaved, numberAffected) { 
    // if (!err) { 
    //  console.log('Success!'); 
    //  res.json(documentSaved); 
    // } else { 
    //  console.log(err); 
    // } 
    // }); 
}); 

后来我也发现了findById更新的一些文档http://mongoosejs.com/docs/documents.html建议,这似乎是最新的,请检查您正在使用的版本,并仔细检查了两次,你是在你的函数中使用doc。你也可以检查你的mongoDB,看看是否有多个记录被保存。

db.documents.find({}) 
+0

嗨。那么,2.7是过时的,我使用3.8 *的猫鼬。 至于保存和更新,它确实取决于:我主要使用Mongoose中间件(前/后)保存哈希密码过渡。 这篇文章很好地描述了:http://stackoverflow.com/questions/22278761/mongoose-difference-between-save-and-using-update – wittgenstein 2014-12-11 08:42:03