我在 MongoDB 中有以下文档。
{
"_id" : ObjectId("521aff65e4b06121b688fabc"),
"user" : "abc",
"servers" : [
{
"name" : "server1",
"cpu" : 4,
"memory" : 4
},
{
"name" : "server2",
"cpu" : 6,
"memory" : 6
},
{
"name" : "server3",
"cpu" : 8,
"memory" : 8
}
]
}
Run Code Online (Sandbox Code Playgroud)
根据某些事件,我必须更新现有服务器的 cpu 和内存字段,或者如果阵列中不存在新服务器,则将其添加到阵列中。目前,我分两步执行此操作。首先检查服务器是否已经存在于数组中。如果是,则更新 cpu 和内存字段。否则,将新的子文档推送到数组中。由于应用程序的多线程性质,有时同一服务器会多次添加到数组中。是否有原子操作符可以执行以下两个操作(类似于$setOnInsert操作符):
注意:$addToSet在上述情况下,运算符不起作用,因为 cpu 或内存的值可能不同。
MongoDb 已经对单个文档进行了原子操作。因此,只要同时向数据库发送 2 个命令,您就可以开箱即用。
当这两个命令无论如何都是矛盾的时候,你的问题就会出现。IE 如果您使用同一对象发送 2 个更新,Mongo 的个人文档气氛不会为您提供帮助。因此,您需要做的是管理应用程序的多线程,以便它不会向 Mongo 发送可能发生冲突的多个命令。
| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |