文档创建猫鼬中的自动增量版本
Posted
技术标签:
【中文标题】文档创建猫鼬中的自动增量版本【英文标题】:an auto-increment version in document creation mongoose 【发布时间】:2020-11-24 09:25:45 【问题描述】:我希望在创建新文档时 versionKey (__v) 字段会自动递增。
(或者我应该在架构中使用新字段“版本”而不是 __v?)
我的应用程序中的架构示例:
Template.js
var mongoose = require('mongoose');
const Test = require('./Test');
var TemplateSchema = new mongoose.Schema(
platform: String,
templateRevision: String,
tests: [Test.schema]
);
TemplateSchema.pre('save', function(next)
this.increment();
return next();
);
module.exports = mongoose.model('Template', TemplateSchema);
路由/templatesApi.js
// create new template document
router.post('/', function(req, res, next)
Test.create(req.body, function (err, tests)
if (err)
console.log(err);
return next(err);
res.json(tests);
);
);
在哪里以及如何在此处插入 versionKey 属性的自动增量操作?
编辑:我尝试使用 .pre('save')
中间件,但它仍然无法正常工作。
我用对了吗?
【问题讨论】:
@turivishal 我看到了那个答案,但我是 Mongo 的初学者,我不知道应该如何使用我正在使用的 '.create' 函数来实现它。我应该在哪里插入 schema.pre("save")? 但是create()
会创建新文档对吗?那为什么要在创建中增加版本?默认情况下将设置为零。
【参考方案1】:
自定义 __v 键名
是的,我们可以将 __v
默认键名更改为任何自定义 versionKey
var TemplateSchema = new mongoose.Schema(
platform: String,
templateRevision: String,
tests: [Test.schema]
,
versionKey: 'version'
);
自动递增版本
下面的中间件会在操作前调用并更新递增的版本,
save()
、this
引用 document 对象时递增
TemplateSchema.pre('save', function(next)
this.increment();
return next();
);
当updateMany()
、this
引用查询对象时递增
TemplateSchema.pre('updateMany', function(next)
this.updateMany(, $inc: version: 1 );
return next()
);
同样的方法你可以为其他方法update()
、updateOne()
、findOneAndUpdate()
、findAndModify()
等创建中间件。
module.exports = mongoose.model('Template', TemplateSchema);
示例
加载模型const Template = require('./Template'); // manage path of Template.js
找到并保存
let doc = Template.findOne( _id: "5f299bdbf045394388fc1461" );
doc.platform = "test platform";
doc.save(); // before this, `save` middleware will call and auto increment version by 1
更新多个文档
Template.updateMany(
platform: "test platform" ,
$set: platform: "demo platform"
);
// before this, `updateMany` middleware will call and increment version by 1
【讨论】:
以上是关于文档创建猫鼬中的自动增量版本的主要内容,如果未能解决你的问题,请参考以下文章