Ada*_*ner 5 javascript mongoose mongodb node.js
当我尝试保存我的文档时,我收到一个VersionError: No matching document found错误,类似于这个问题.
阅读此博客文章后,似乎问题在于我的文档版本控制.我搞乱了一个阵列,所以我需要更新版本.
但是,打电话document.save()对我不起作用.当我在调用之前和之后注销文档时save(),document._v是同样的事情.
我也尝试过document._v = document._v++这也行不通.
码
exports.update = function(req, res) {
if (req.body._id) { delete req.body._id; }
User.findById(req.params.id, function(err, user) {
if (err) return handleError(res, err);
if (!user) return res.send(404);
var updated = _.extend(user, req.body); // doesn't increment the version number. causes problems with saving. see http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
console.log('pre increment: ', updated);
updated.increment();
// updated._v = updated._v++;
console.log('post increment: ', updated);
updated.save(function(err) {
if (err) return handleError(res, err);
return res.json(200, user);
});
});
};
Run Code Online (Sandbox Code Playgroud)
产量
pre increment: { _id: 5550baae1b571aafa52f070c,
provider: 'local',
name: 'Adam',
email: 'azerner3@gmail.com',
hashedPassword: '/vahOqXwCwKQKtcV3KBQeFge/YB0xtqOj+YDyck7gzyALA/IP7u7BfqQhlVHBQT26//XfBTkaOCK2bQXg65OzA==',
salt: 'MvzXW7D4xuyGQBJNeFRoUg==',
__v: 32,
drafts: [],
starredSkims: [],
skimsCreated: [ 5550cfdab8dcacd1a7892aa4 ],
role: 'user' }
post increment: { _id: 5550baae1b571aafa52f070c,
provider: 'local',
name: 'Adam',
email: 'azerner3@gmail.com',
hashedPassword: '/vahOqXwCwKQKtcV3KBQeFge/YB0xtqOj+YDyck7gzyALA/IP7u7BfqQhlVHBQT26//XfBTkaOCK2bQXg65OzA==',
salt: 'MvzXW7D4xuyGQBJNeFRoUg==',
__v: 32,
drafts: [],
starredSkims: [],
skimsCreated: [ 5550cfdab8dcacd1a7892aa4 ],
role: 'user' }
Run Code Online (Sandbox Code Playgroud)
这里的问题与使用__v并尝试手动更新它有关。 .increment实际上并不立即执行增量,但它确实为模型设置了一个内部标志来处理增量。我找不到任何关于 的文档.increment,所以我认为它可能供内部使用。问题源于除了.extend使用.__vdocument.__v++.increment
当您使用_.extend它时,将属性直接复制__v到对象上,这似乎会导致问题,因为 Mongoose 在内部无法找到旧版本。我没有深入挖掘以找出具体原因,但您也可以通过添加来绕过它delete req.body.__v。
您还可以使用.findByIdAndUpdate. 请注意,这不会在内部使用__v或增加它。正如其他答案和链接的错误所示,如果您想在更新期间增加版本,则必须手动执行此操作。
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |