使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本
Posted
技术标签:
【中文标题】使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本【英文标题】:Node.js and MongoDB using Mongoose. Unable to increment doc version using findByIdAndUpdate 【发布时间】:2018-06-14 23:54:16 【问题描述】:我目前面临一个问题,当两个人在我的 Angular 应用程序中的同一页面上工作时,他们会互相覆盖。我可以看到的问题是文档版本没有增加,因此 mongo 不会检查文档版本是新的还是旧的。有人可以指导我如何解决这个问题。下面是我的代码 sn-p。
var art = new Article(pageBody);
Article.findByIdAndUpdate(art._id, pageBody, new: true, upsert: true,$inc: art.v: 1 , function(err, model)
console.log(art.__v);
// NOTE: new page will never happen here, moved to issue controller
if (err)
err =
source: 'Article.findByIdAndUpdate',
bodyPageId: pageBody._id,
articleId: art._id,
message: err.message,
err: err.toString()
;
cb(err);
);
else
console.log(art.__v);
cb();
【问题讨论】:
【参考方案1】:在查询的更新部分,上下文不是本地文章实例,而是找到的文档,因此您想像这样更新:
$inc: v: 1
使用您当前的代码,MongoDB 在您的文章中创建一个名为 "art"
的新子文档,其中包含一个名为 "v"
的字段,这不是您想要的:
art:
v: 1
【讨论】:
感谢您的回复。效果很好,但是我注意到该函数实际上并没有对版本进行错误处理,例如假设您更新模型或数据它将是 v2 但如果我也更新模型而不刷新它也是 v2 但您的数据已被删除。知道如何使用内置版本控制的 Mongodbs 吗? 我不确定我是否理解...?! 对此感到抱歉。我的意思是有一个场景,我创建了一个 cms,用户可以使用它来创建 html 页面,比如杂志。现在,当两个人在同一个页面上工作时,不会出现错误或警告向人们显示他们的更改已过时。我的意思是第一个用户的 versionkey 是 3,第二个用户是 1。由于一个小于 3,他们应该收到一条错误消息,指出除非刷新,否则无法保存。 对我来说这听起来更像是一个应用程序/错误处理主题。您应该能够构建一些东西来很好地支持这些场景b) 使用 Websockets (dontpanicblog.co.uk/2016/04/17/…) 通知您的客户同时编辑您的文档。以上是关于使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Node.js 和 Mongoose 插入 MongoDB
使用 Mongoose、Node.js 和 Underscore 生成代码的简单方法?