2013-07-15 73 views
1

我想在現有的Mongo文檔中添加新的字段。在現有的Mongo文檔中添加更多的字段

{ 
    "_id" : ObjectId("51e390ade4b0a29154453698"), 
    "group_name" : "om", 
    "target_audience" : { 
     "gender" : "male", 
     "section" : "Item 4", 
     "catagory" : "Eletronics", 
     "location" : { 
      "country" : "Item 3", 
      "state" : "Item 3", 
      "city" : "Item 4" 
     } 
    } 
} 

這是我的文檔。我想添加這個doc.I一些領域編寫以下code.But,而不是同一個文檔中添加記錄它取代前一個。我的Java代碼是:

BasicDBObject doc=new BasicDBObject(); 
     BasicDBObject q=new BasicDBObject("group_name",selectedgn); 
     doc.put("date_from",frm); 
     doc.put("date_too",too); 
     doc.put("description",desc); 
     doc.put("url",url); 
     BasicDBObject doc1=new BasicDBObject(); 
     doc1.put("Notification",doc); 
     con.coll.update(q,doc1); 
+0

你應該看一看上[$ set](http://docs.mongodb.org/manual/reference/operator/set/)運算符。 –

回答

3

正如其他人所說的,使用$ set操作符。您的代碼應該是這樣的(我只改最後一行):

BasicDBObject doc=new BasicDBObject(); 
BasicDBObject q=new BasicDBObject("group_name",selectedgn); 
doc.put("date_from",frm); 
doc.put("date_too",too); 
doc.put("description",desc); 
doc.put("url",url); 
BasicDBObject doc1=new BasicDBObject(); 
doc1.put("Notification",doc); 
con.coll.update(q,new BasicDBObject("$set",doc1)); 

或者,如果你只是想更新通知子文檔中的字段:

BasicDBObject doc=new BasicDBObject(); 
BasicDBObject q=new BasicDBObject("group_name",selectedgn); 
doc.put("Notification.date_from",frm); 
doc.put("Notification.date_too",too); 
doc.put("Notification.description",desc); 
doc.put("Notification.url",url); 
con.coll.update(q,new BasicDBObject("$set",doc)); 
0

這裏有http://docs.mongodb.org/manual/core/update/#add-a-new-field-to-a-document大量文檔這不應該取代舊的屬性。

+0

我可以在Mongodb客戶端上編寫相同的代碼。但是,當從java驅動程序嘗試它給$集錯誤。 –

+0

你得到什麼錯誤?上面的代碼片段工作。前 db.sotest.insert({_ ID:1,組名: 「組1」,shouldbethere:1}) 後 > db.sotest.find() { 「通知」: { 「date_from 「:ISODate(」2013-07-16T19:11:40.686Z「), 」date_too「:ISODate(」2013-07-16T19:11:40.686Z「), 」description「:」desc「, 」 url「:」url「 }, 」_id「:1, 」group_name「:」group1「, 」shouldbethere「:1 } –

相關問題