2012-01-30 7 views
21

MongoDB'nin Java sürücüsünü aynı işlemdeki bir kayda iki güncelleme yapmak için ($ set ve $ push) kullanmaya çalışıyorum. Şuna benzer bir kod kullanıyorum: "db depolanan alanlar ile başlayamaz:

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); 

Ben $ setini birleştirip $ bir BasicDBList aracılığıyla aynı güncelleştirme olarak itmek, ben bir IllegalArgumentException olsun '$' (Hatalı Anahtar: '$ push') ".

İki ayrı güncelleştirme yaparsam, hem pushUpdate hem de setUpdate geçerli sonuçlar üretir.

Teşekkürler!

cevap

40

Java sürücüsünü bilmiyorum, ancak orada bir liste oluşturmanız mı gerekiyor? Bu kodu denerseniz ne olur? kodunuzu (sanıyorum) üretir Oysa

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); 

Bu, bu

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

eşdeğer üretmelidir: Bu

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

var ki! Çok teşekkürler! – HolySamosa