【发布时间】:2021-12-29 10:11:31
【问题描述】:
我正在使用 mongo 4.2.15
这里是条目:
{
"keys": {
"country": "US",
"channel": "c999"
},
"counters": {
"sale": 0
},
"increments": null
}
我希望能够初始化计数器集以及递增counters.sale 值并将递增结果快照保存到increments 属性。类似的东西:
db.getCollection('counterSets').update(
{ "$and" : [
{ "keys.country" : "US"},
{ "keys.channel" : "c999"}
]
},
{ "$inc" :
{ "counters.sale" : 10
},
"$set" :
{ "keys" :
{ "country" : "US", "channel" : "c999"},
"increments":
{ "3000c058-b8a7-4cff-915b-4979ef9a6ed9": {"counters" : "$counters"} }
}
},
{upsert: true})
结果是:
{
"_id" : ObjectId("61965aba1501d6eb40588ba0"),
"keys" : {
"country" : "US",
"channel" : "c999"
},
"counters" : {
"sale" : 10.0
},
"increments" : {
"3000c058-b8a7-4cff-915b-4979ef9a6ed9" : {
"counters" : "$counters"
}
}
}
是否可以进行这样的更新,这是如何通过单个 upsert 从根对象 counters 复制增量结果到子 increments.3000c058-b8a7-4cff-915b-4979ef9a6ed9.counters 的。我想实施安全措施。或许你可以推荐一些其他的设计?
【问题讨论】:
-
您是否尝试明确设置每个计数器?
"counters.sale": "$counters.sale" -
@geobreze 结果是
"increments" : { "3000c058-b8a7-4cff-915b-4979ef9a6ed9" : { "counters.sale" : "$counters.sale" } }
标签: java mongodb mongodb-query upsert mongotemplate