gpt4 book ai didi

java - 更新嵌套文档归档并在 mongodb 中递增

转载 作者:行者123 更新时间:2023-11-29 05:00:10 26 4
gpt4 key购买 nike

我想更新一个嵌套文档,如果存在则用新值递增旧值或插入一个新文档。

数据

New Zealand,Waikato,Hamilton,1004
New Zealand,Waikato,Auckland,145
New Zealand,Otago,Dunedin,1068

JSON

{ "_id" : ObjectId("55e7d2a72f68907c17cfcb2f"), "country" : "New Zealand", 
"regions" : [ { "region" : "Waikato", "size" : 1004 },
{ "region" : "Waikato", "size" : 145 }, { "region" : "Otago", "size" : 1068 } ] }

在文档 regions 中,数组本质上是动态的。在上面的文档中,我需要更新 ~Waikato` 的增量字段 size 值。而不是在区域数组中放置另一条记录。

我的代码

BasicDBObject query = new BasicDBObject();
query.put("country", "New Zealand");
query.put("regions.$.region", "Waikato");
BasicDBObject data = new BasicDBObject().append("$inc", new BasicDBObject().append("regions.$.size", 145));
BasicDBObject command = new BasicDBObject();
command.put("$set", data);
collection.update(query, command, true, false);

我需要这样的输出:

{ "_id" : ObjectId("55e7d2a72f68907c17cfcb2f"), "country" : "New Zealand", "regions" : [ { "region" : "Waikato", "size" : 1149 }, { "region" : "Otago", "size" : 1068 } ] }

请就这些问题给我建议。

最佳答案

你的 positional $运算符只属于“更新部分而不属于查询。您还需要在查询中 .append() 否则您会覆盖:

BasicDBObject query = new BasicDBObject();
query.put("country", "New Zealand");
query.append("regions.region", "Waikato");

BasicDBObject update = new BasicDBObject()
.append("$inc", new BasicDBObject().append("regions.$.size", 145));

collection.update(query, update, true, false);

基本上看起来像这样(shell wise):

collection.update(
{ "country": "New Zealand", "regions.region": " "Waikato" },
{ "$inc": regions.$.size": 145 },
true,
false
)

关于java - 更新嵌套文档归档并在 mongodb 中递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32367438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com