mongodb - Mongoose 没有自动增加 __v

标签 mongodb mongoose

我不知道为什么 mongoose 没有在每次调用 .save() 方法时自动增加 __v

我尝试启用 Mongoose 的 Debug模式并记录保存行之前和之后的记录。但 __v 没有改变。我还看到 Mongoose 在没有 $inc 运算符的情况下调用 devices.updateOne()

示例:

const device = await device({ _id: '5fb3855c241cef097083803d' });

device.name = 'New Name';
device.updatedAt = new Date();

// try to log __v before update
console.log(device.__v); // --> 1
const result = await device.save();
// try to log __v after update
console.log(result.__v); // --> 1

这里是登录终端

1
Mongoose: devices.updateOne({ _id: ObjectId("5fb3855c241cef097083803d") }, { '$set': { name: 'New Name', updatedAt: new Date("Wed, 06 Oct 2021 06:38:34 GMT") }}, { session: null })
1

MongoDb版本:5.0.2 Mongoose 版本:^5.9.20

最佳答案

我发现了这个问题。 Mongoose 的默认版本控制方案仅在您以可能不兼容的方式修改数组时检查文档的版本。所以我只更新名称,一个字符串字段,这样 __v 就不会改变,因为如果你不修改任何数组,它永远不会抛出 VersionError。

设置optimisticConcurrency: true如果你想增加 __v 甚至改变一个字符串字段

关于mongodb - Mongoose 没有自动增加 __v,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69461024/

相关文章:

java - MongoDB Java 驱动程序 : Convert BsonDocument to Document and back

mongodb - noSQL 和规范化数据

javascript - Mongoose :类型错误:[函数名称]不是函数。当尝试创建 Mongoose 实例时

reactjs - 为什么我的 get 路由不运行我的 Mongoose 查询?

node.js - 如何像sql数据库一样显示mongodb中模式之间的关系?

python - AsyncMongo 和 PyMongoDB 地理索引查询

javascript - 没有字段名的Mongodb返回值

node.js - 如何在 Mongoose 中保护字段免受大规模分配?

node.js - MongoDB 获取至少有一个非空数组的文档

node.js - 在多个微服务上使用 Mongoose 模式