Mongoose在保存/更新时更改文档_id

时间:2014-12-10 21:45:06

标签: node.js mongodb mongoose

快点:

为什么推送更新时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);
        }

    });
});

2 个答案:

答案 0 :(得分:1)

好的,问题解决了: 我正在记录错误的_id(doh!)

答案 1 :(得分:1)

Mongoose docs 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);
  //   }
  // });
});

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

db.documents.find( {} )