gpt4 book ai didi

java - 向 MongoDB 文档中的对象添加新字段

转载 作者:可可西里 更新时间:2023-11-01 09:14:09 26 4
gpt4 key购买 nike

我的 MongoDB 中有一个包含数千个文档的集合。当前每个文档看起来像这样:

{
"_id" : ObjectId("1"),
"FIELD1" : {
"STR1" : "some text",
"STR2" : "some text",
"STR3" : "some text",
"STR4" : "some text"
},
"FIELD2" : "some text"
}

通过以下代码片段,我成功地为所有 4000 多个文档添加了一个新字段:

// Add new field to all documents   
BasicDBObject query = new BasicDBObject();
BasicDBObject update = new BasicDBObject();
update.put("$set", new BasicDBObject(NEW_DB_FIELD_NAME, new BasicDBObject()));
WriteResult result = coll.update(query, update, true, true);

文档有一个新的结构,其中 FIELD3 是一个 Object:

{
"_id" : ObjectId("1"),
"FIELD1" : {
"STR1" : "some text",
"STR2" : "some text",
"STR3" : "some text",
"STR4" : "some text"
},
"FIELD2" : "some text",
"FIELD3" : {
}
}

现在,问题是我希望将多个项目添加到 FIELD3,其中每个项目都是一个包含 2 个 StringObject:

{
"_id" : ObjectId("1"),
"FIELD1" : {
"STR1" : "some text",
"STR2" : "some text",
"STR3" : "some text",
"STR4" : "some text"
},
"FIELD2" : "some text",
"FIELD3" : {
"ITEM1" : {
"STR1" : "",
"STR2" : ""
},
"ITEM2" : {
"STR1" : "",
"STR2" : ""
},
"ITEM3" : {
"STR1" : "",
"STR2" : ""
}
}
}

我试过的是这样的:

BasicDBObject query = new BasicDBObject{"FIELD2","some text"};
BasicDBObject update = new BasicDBObject();
update.put("$set", new BasicDBObject("FIELD3.ITEM1.STR1", "some text").append("FIELD3.ITEM1.STR2", "some text");
result = coll.update(query, update, true, false);

问题是我只能在 FIELD3 下获得一个新项目。当我循环遍历项目时,它会不断被新值替换。

请帮忙!

更新:

在@Explosion Pills 的帮助下,我成功地将所有ITEM1ITEM2ITEM3 等添加到我的新创建了 FIELD3。但是,我现在有另一个问题,因为我有“重复”项目,其中 value 字段相同。我不想这样。

什么是删除重复项的优雅方法?或者,更好的是,什么是仅插入非重复项的优雅方式?

我之前对重复问题不够清楚。问题是,不同的项目必须有不同的名称,例如项目 1、项目 2 等;否则,它们会相互替代。我想比较的是它们的 value

如果我将数据存储在不同的结构中会更好/更容易吗?我在想是否应该将 FIELD3 更改为 ArrayList 而不是 Object。目前,它类似于以下内容,我希望从中删除带有“WATERMELON”字段的重复水果。

FRUITS
> FRUIT1
> WATERMELON
> BIG
> FRUIT2
> WaTeRMeLON
> BIG
> FRUIT3
> APPLE
> SMALL

请帮忙!

最佳答案

This post说要为每个要创建的对象使用单独的 BasicDBObject。这很冗长,但我还没有找到另一种方法。

BasicDBObject item1 = new BasicDBObject("STR1", "text").append("STR2", "txt");
// also for item2 and item3...

BasicDBObject field3 = new BasicDBObject("ITEM1", item1).append("ITEM2", item2);

update.put("$set", new BasicDBObject("FIELD3", field3));

关于java - 向 MongoDB 文档中的对象添加新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35447465/

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