【发布时间】:2016-02-25 22:43:49
【问题描述】:
我在 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
}
]
}
根据某些事件,我必须更新现有服务器的 cpu 和内存字段,或者如果阵列中不存在新服务器,则将其添加到阵列中。目前,我分两步执行此操作。首先检查服务器是否已经存在于阵列中。如果是,请更新 cpu 和内存字段。否则,在数组中推送一个新的子文档。由于应用程序的多线程特性,有时同一服务器会多次添加到阵列中。有没有原子操作符可以执行以下两个操作(类似于$setOnInsert操作符):
- 如果数组中存在元素,则更新其字段。
- 如果数组中不存在元素,则推送新元素。
注意:运算符$addToSet在上述情况下不起作用,因为cpu或内存的值可能不同。
【问题讨论】: