文档创建猫鼬中的自动增量版本

乔恩

我希望在创建新文档时,versionKey(__v)字段将自动递增。

(或者我应该在模式中使用新字段'version'而不是__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);

路线/模板Api.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')中间件,它仍然无法正常工作。

我使用对吗?

土生的

自定义__v键名

是的,我们可以将__v默认密钥名称更改为任何自定义版本

var TemplateSchema = new mongoose.Schema(
  {
    platform: String,
    templateRevision: String,
    tests: [Test.schema]
  },
  { versionKey: 'version' }
);

自动增量版

下面的中间件将在操作之前调用并更新增量版本,

  • 增量时save()this指的是文档对象
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()等。

  • 我们正在处理Template.js文件,最后您需要创建一个用于架构和导出的模型。
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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章