2012-01-30 30 views
21

我試圖使用MongoDB的Java驅動程序在同一操作中對記錄進行兩次更新($ set和$ push)。我使用類似於下面的代碼:

BasicDBObject pushUpdate = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital)); 
    BasicDBObject setUpdate = new BasicDBObject().append("$set", new BasicDBObject().append("endTime", time)); 
    BasicDBList combinedUpdate = new BasicDBList(); 
    combinedUpdate.add(pushUpdate);   
    combinedUpdate.add(setUpdate); 


    collection.update(new BasicDBObject().append("_id", pageId), combinedUpdate, true, false); 

當我結合$設置和$推入通過BasicDBList相同的更新,我得到一個IllegalArgumentException:「存儲在數據庫中的字段不能啓動'$'(Bad Key:'$ push')「。

如果我做兩個單獨的更新,則pushUpdate和setUpdate都會生成有效的結果。

謝謝!

回答

40

我不知道Java驅動程序,但是您是否必須在那裏創建一個列表?如果你嘗試這些代碼會發生什麼?

BasicDBObject update = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital)); 
update = update.append("$set", new BasicDBObject().append("endTime", time)); 

collection.update(new BasicDBObject().append("_id", pageId), update, true, false); 

而你的代碼生成(我懷疑),這將產生的

db.collection.update({_id: pageId}, {$push: {values: dboVital}, $set: {endTime: time}}); 

相當於此:

db.collection.update({_id: pageId}, [{$push: {values: dboVital}}, {$set: {endTime: time}}]); 
+1

這就是它!非常感謝! – HolySamosa 2012-01-30 21:54:36