为什么推送更新时Mongoose会更改/升级文档的_id字段? 这是预期的行为吗?
感谢。
这是我在PUT路线中使用的更新,它成功返回更新后的模型,但不幸的是,它有一个新的_id for 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);
}
});
});
答案 0 :(得分:1)
好的,问题解决了: 我正在记录错误的_id(doh!)
答案 1 :(得分:1)
Mongoose docs http://mongoosejs.com/docs/2.7.x/docs/model-definition.html
建议使用update
或findOne
前:
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);
// }
// });
});
稍后我还发现某些文档http://mongoosejs.com/docs/documents.html中建议的findById更新,它似乎是最新版本,请检查您使用的版本,并仔细检查您使用doc
的两次你的职能在这里。您还可以检查您的mongoDB并查看是否有多个记录被保存。
db.documents.find( {} )