我使用Mongoose版本3和MongoDB版本2.2。我注意到一个__v字段已经开始出现在我的MongoDB文档。这与版本控制有关吗?它是如何使用的?
当前回答
在NestJS中删除需要添加选项Schema()装饰器
@Schema({ versionKey: false })
其他回答
从这里开始:
versionKey是第一次创建时在每个文档上设置的属性 猫鼬。属性的内部修订 文档。此文档属性的名称是可配置的。的 默认值是__v。 如果这与你的应用程序冲突,你可以这样配置:
new Schema({..}, { versionKey: '_somethingElse' })
我看不出托尼的解决方案……所以我得自己处理
如果你不需要version_key,你可以:
var UserSchema = new mongoose.Schema({
nickname: String,
reg_time: {type: Date, default: Date.now}
}, {
versionKey: false // You should be aware of the outcome after set to false
});
将versionKey设置为false意味着文档不再有版本。
如果文档包含一组子文档,这就会出现问题。可以删除其中一个子文档,从而减小数组的大小。稍后,另一个操作可以在数组中的原始位置访问子文档。
由于数组现在变小了,它可能会意外地访问数组中错误的子文档。
versionKey通过将文档与mongoose内部使用的a versionKey相关联来解决这个问题,以确保它访问正确的集合版本。
更多信息请访问:http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
我们可以在模式定义中使用versionKey: false
'use strict';
const mongoose = require('mongoose');
export class Account extends mongoose.Schema {
constructor(manager) {
var trans = {
tran_date: Date,
particulars: String,
debit: Number,
credit: Number,
balance: Number
}
super({
account_number: Number,
account_name: String,
ifsc_code: String,
password: String,
currency: String,
balance: Number,
beneficiaries: Array,
transaction: [trans]
}, {
versionKey: false // set to false then it wont create in mongodb
});
this.pre('remove', function(next) {
manager
.getModel(BENEFICIARY_MODEL)
.remove({
_id: {
$in: this.beneficiaries
}
})
.exec();
next();
});
}
}
它是版本键。每当有新的更新时,它就会更新。我个人不喜欢禁用它。
如果你想了解更多,请阅读这个解决方案 [1]:猫鼬版本:什么时候关闭它是安全的?
在NestJS中删除需要添加选项Schema()装饰器
@Schema({ versionKey: false })
推荐文章
- 有没有办法修复包锁。json lockfileVersion所以npm使用特定的格式?
- 无法连接到服务器127.0.0.1:27017
- 如何使用npm全局安装一个模块?
- 实时http流到HTML5视频客户端的最佳方法
- 使用node.js下载图像
- Node.js Express中的HTTP GET请求
- Node.js:将文本文件读入数组。(每一行都是数组中的一项。)
- npm犯错!错误:EPERM:操作不允许,重命名
- Node Sass还不支持当前环境:Linux 64位,带false
- 我如何添加环境变量启动。VSCode中的json
- 如何创建数据库的MongoDB转储?
- 如何将MongoDB作为Windows服务运行?
- 解析错误:无法读取文件“…/tsconfig.json”.eslint
- 在Node.js中'use strict'语句是如何解释的?
- 当WebSockets可用时,为什么要使用AJAX ?