我在我的MongoDB中有一個包含數千個文檔的集合。 每個文檔看起來像目前這樣:在MongoDB中添加新字段到對象文檔
{
"_id" : ObjectId("1"),
"FIELD1" : {
"STR1" : "some text",
"STR2" : "some text",
"STR3" : "some text",
"STR4" : "some text"
},
"FIELD2" : "some text"
}
用下面的代碼片段,我設法一個新字段添加到ALL 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
w ^這裏的每個項目是包含2 String
秒的Object
:
{
"_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
下一個新項目。當我通過項目循環時,它不斷被新值取代。
請幫忙!
UPDATE:
隨着@Explosion丸的幫助下,我已成功地所有的ITEM1
,ITEM2
,ITEM3
等添加到我的新創建FIELD3
。然而,我現在有另一個問題,我有'重複'項目中的value
字段是相同的。我不想那樣。
什麼是刪除重複的優雅方式?或者,甚至更好,什麼是插入非重複的優雅方式?
我之前對重複問題的描述不夠清楚。事情是,不同的項目必須有不同的名稱,例如ITEM1,ITEM2等;否則,他們會互相替換。我想要比較的是他們的value
。
如果我將數據存儲在不同的結構中會更好嗎?我在想,如果FIELD3應該改爲ArrayList
而不是Object
。 目前,它類似於後面的,我希望用「WATERMELON」字段刪除重複的水果。
FRUITS
> FRUIT1
> WATERMELON
> BIG
> FRUIT2
> WaTeRMeLON
> BIG
> FRUIT3
> APPLE
> SMALL
請幫忙!
我已更新我的帖子,以更清楚地說明我的新問題。你能幫我嗎? @爆炸藥 – Tacocat
Nvm!我已經知道了,哈哈! @Explosion Pills – Tacocat