angular - 文档创建猫鼬中的自动增量版本
问题描述
我希望在创建新文档时 versionKey (__v) 字段将自动递增。
(或者我应该在架构中使用新字段“版本”而不是 __v?)
我的应用程序中的架构示例:
模板.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
推荐阅读
- javascript - 悬停在一条路径上时是否可以启动所有 SVG 关键帧动画?
- c# - Windows 运行时组件 C++ 结构/类返回到 UWP
- oracle - 无法过滤空日期时间值
- reactjs - 如何以可重用的方式为我的 material-ui 表创建选择过滤器?
- rabbitmq - RabbitMQ 保证传递到镜像队列
- reactjs - Material-UI Drawer 未在 Firefox 中显示
- sql-server - 组的平均值不正确
- .htaccess - 使用 php 或 .htaccess 清理 URL
- c++ - 用子类填充的基类向量不起作用
- excel - Visual Studio 2017 - 多个 Excel 工作表