Mongoose 中的“__v”字段是什么

新手上路,请多包涵

我正在使用 Mongoose 版本 3 和 MongoDB 版本 2.2。我注意到 __v 字段已开始出现在我的 MongoDB 文档中。它与版本控制有关吗?它是如何使用的?

原文由 Simon Lomax 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

这里

versionKey 是 Mongoose 首次创建每个文档时设置的属性。此键值包含文档的内部修订。此文档属性的名称是可配置的。默认值为 __v

如果这与您的应用程序冲突,您可以这样配置:

 new Schema({..}, { versionKey: '_somethingElse' })

原文由 Tony The Lion 发布,翻译遵循 CC BY-SA 3.0 许可协议

好吧,我看不到托尼的解决方案……所以我必须自己处理……


如果你不需要 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 通过将文档与 versionKey 相关联来解决这个问题,mongoose 在内部使用它来确保它访问正确的集合版本。

可以在以下位置找到更多信息:http: //aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html

原文由 kenberkeley 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题