2012-01-11 142 views
0

使用mongodb + java的Im。我試圖將新文檔插入到現有文檔中。可以說,我有一個集合「用戶」:在文檔中插入文檔

{"_id" :{"$oid" : "4dc9..."}, "name" :"Klaus", "gender" :"unknown", "adress" :"null"} 

現在我想更新該文件其中名稱==克勞斯和添加新文檔到關鍵adress(哪來現在只有「空」)。所以我想這樣的事情:

{"_id" :{"$oid" : "4dc9..."}, "name" :"Klaus", "gender" :"unknown", "adress" :{"country" :"Austria", "city": "..."}} 

如何在Java中做到這一點?我試過

//DBCollection col "Users" 
String json = "{'country': '" + user.country + "', 'city': '" + user.city + "'}"; 
DBObject dbObject = (DBObject)JSON.parse(json); 
col.update(new BasicDBObject().append("name", "Klaus"), dbObject); //not working 

我沒有得到任何errormessage,新文件就是不存在。我的JSON有問題嗎?或者我需要另一個「更新」功能,也許替換(替換adress:null與​​)?謝謝你的幫助!

回答

2

看看你的更新。你甚至沒有指定應該有一個字段「地址」。另外請注意,您並未在文檔中「插入」文檔。而是將您的頂級文檔的字段設置爲嵌入文檔的值。使用此代替:

col.update(new BasicDBObject("name", "Klaus"), new BasicDBObject("$set", new BasicDBObject("address", dbObject))); 
+0

啊感謝您的快速回答它的工作。起初,我不想在更新中使用關鍵「地址」,因爲它已經存在於文檔中 - 但現在已經清楚了。我只是遇到了一些「$ set」的問題,我在一些教程中看到,總是有一種方法可以在沒有「$ set」的情況下進行更新,但也許我錯了。 – OverStack 2012-01-11 12:55:33

+0

那些教程是撒謊的;)索賠成立的唯一方式是,如果每次更新整個文檔時覆蓋整個文檔,效率較低且通常被破壞。儘可能使用$ set。 – 2012-01-11 12:56:58