- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
当我尝试保存文档时,我收到 VersionError: No matching document found
错误,类似于 this所以问题。
看完this博客文章,似乎问题出在我的文档的版本控制上。我弄乱了一个数组,所以我需要更新版本。
但是,调用 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);
});
});
};
输出
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' }
最佳答案
这里的问题与使用 __v
并尝试手动更新它有关。 .increment
实际上并没有立即执行增量,但它确实为模型设置了一个内部标志来处理增量。我在 .increment
上找不到任何文档,所以我认为它可能是供内部使用的。问题源于试图将 .extend
与已经具有 __v
的对象组合(顺便说一下,有两个下划线,而不是 document.__v++
无论如何都会在内部影响模型)除了使用 .increment
.
当您使用 _.extend
时,它会将 __v
属性直接复制到对象上,这似乎会导致问题,因为 Mongoose 在内部无法找到旧版本。我没有深入挖掘以找出具体原因,但您也可以通过添加 delete req.body.__v
来解决它。
除了查找和保存两个步骤,您还可以使用.findByIdAndUpdate
.请注意,这 not 使用 __v
或在内部增加它。正如另一个答案和链接的错误所表明的那样,如果您想在更新期间增加版本,则必须手动进行。
关于javascript - Mongoose:增加我的文档版本号不起作用,当我尝试保存时出现版本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30172314/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!