2012-01-30 22 views
21

में $ पुश और $ सेट एक ही ऑपरेशन में रिकॉर्ड के लिए दो अपडेट ($ सेट और $ पुश) बनाने के लिए मैं मोंगोडीबी के जावा ड्राइवर का उपयोग करने की कोशिश कर रहा हूं। मैं निम्न के समान कोड का उपयोग कर रहा: "DB में संग्रहीत क्षेत्रों के साथ शुरू नहीं कर सकते हैं:

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 मिल '$' (खराब कुंजी: '$ पुश') "।

यदि मैं दो अलग-अलग अपडेट करता हूं, तो pushUpdate और setUpdate दोनों मान्य परिणाम उत्पन्न करते हैं।

धन्यवाद!

उत्तर

40

मुझे जावा ड्राइवर नहीं पता है, लेकिन क्या आपको वहां एक सूची बनाना है? यदि आप इस कोड को आजमाते हैं तो क्या होता है?

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

संबंधित मुद्दे