2012-01-11 194 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