我使用Mongoose版本3和MongoDB版本2.2。我注意到一个__v字段已经开始出现在我的MongoDB文档。这与版本控制有关吗?它是如何使用的?
当前回答
在NestJS中删除需要添加选项Schema()装饰器
@Schema({ versionKey: false })
其他回答
我看不出托尼的解决方案……所以我得自己处理
如果你不需要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
“文档”中的“__v”字段服务于“optimisticConcurrency”关注点。
这个术语在猫鼬中基本上是指: 让,你通过'findOne, findById'抓取了一个文档,但没有使用mongoose的save()方法。如果在这个时间间隔内,任何其他代码在第一个文档实例之前抓取相同的文档并使用.save()方法,会怎样呢? 在这个用例中,如果我们想(特定于猫鼬)抛出一个版本错误之类的东西,我们在schema中使用optimisticConcurrency: true选项。
然后mongoose将使用'__v1'来比较这两个文档。
没有optimisticConcurrency: true选项。“__v”没有没有效果。猫鼬不会增加1。
注意:在'findOneAndUpdate'类操作中,不会更新'__v'。(只有save()更新)
它是版本键。每当有新的更新时,它就会更新。我个人不喜欢禁用它。
如果你想了解更多,请阅读这个解决方案 [1]:猫鼬版本:什么时候关闭它是安全的?
在NestJS中删除需要添加选项Schema()装饰器
@Schema({ versionKey: false })
从这里开始:
versionKey是第一次创建时在每个文档上设置的属性 猫鼬。属性的内部修订 文档。此文档属性的名称是可配置的。的 默认值是__v。 如果这与你的应用程序冲突,你可以这样配置:
new Schema({..}, { versionKey: '_somethingElse' })
推荐文章
- 在用nodejs和express创建的REST API中设置响应状态和JSON内容的正确方法
- 如何获得请求路径与表达请求对象
- 节点和错误:EMFILE,打开的文件太多
- 没有定义Electron require()
- 在摩卡测试时调用异步函数如何避免超时错误:超时超过2000ms
- package.json中属性“private”的目的是什么?
- 用套接字发送消息到指定客户端。IO和node.js
- 当我运行' npm install '时,它返回' ERR!代码EINTEGRITY ' (npm 5.3.0)
- 我如何使用Node.js Crypto创建HMAC-SHA1哈希?
- 如何在package.json中使用“main”参数?
- NPM清洁模块
- 在Node.js中加载基本HTML
- Node.js和CPU密集型请求
- 为什么在节点REPL中没有定义__dirname ?
- 在Node.js中克隆对象