2013-03-15 9 views
29

में $ पुश करें मैं mongo 2.2.3 और जावा ड्राइवर का उपयोग कर रहा हूं। मेरी दुविधा, मुझे एक फ़ील्ड को धक्का देना है और एक सरणी में मूल्य है, लेकिन मुझे लगता है कि यह कैसे करना है। अपने डेटा का एक नमूना:

"_id" : 1, 
"scores" : [ 
    { 
     "type" : "homework", 
     "score" : 78.97979 
    }, 
    { 
     "type" : "homework", 
     "score" : 6.99 
    }, 
    { 
     "type" : "quiz", 
     "score" : 99 
    } 
] 

मैं खोल में $ धक्का:

db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}}) 

लेकिन जब मैं जावा में इस का अनुवाद मैं अपने स्वयं को भ्रमित और एक दीवार पर अपने कीबोर्ड चक यह है।

मेरी जावा कोड (अपूर्ण और गलत) अब तक:

DBObject find = new BasicDBObject("_id", 1); 
DBObject push = new BasicDBObject("$push", new BasicDBObject(
         "scores", new BasicDBObject())); 
+1

दीवार कीबोर्ड लॉल पर मेरे कीबोर्ड को चक करने के लिए ऊपर उठाया गया। –

उत्तर

31
DBObject listItem = new BasicDBObject("scores", new BasicDBObject("type","quiz").append("score",99)); 
DBObject updateQuery = new BasicDBObject("$push", listItem); 
myCol.update(findQuery, updateQuery); 
+0

धन्यवाद! ठीक वही जो मेरे द्वारा खोजा जा रहा था। मैंने कुछ ऐसा करने की कोशिश की लेकिन मुझे लगता है कि मैंने गलत जगह पर रखा है। –

+0

मैं उदाहरण की कोशिश कर रहा हूं लेकिन यह मुझे "अपडेट" का उपयोग करने की अनुमति नहीं देता है .. इसके बजाय मुझे संग्रह ऑब्जेक्ट के साथ "अपडेटोन" के लिए पूछता है .. – user2189668

+1

'अपडेट' का उपयोग करना संभव नहीं है! क्या कारण है?! –

11

आप खोल के क्वेरी प्रारूप के साथ और अधिक comforable हैं, तो आप यह JSON.parse उपयोग करने के लिए contstruct आसान है मिल सकता है आपके $push के लिए DBObject:

import com.mongodb.util.JSON; 

String json = "{$push:{scores:{type:'quiz', score:99}}}"; 
DBObject push = (DBObject) JSON.parse(json); 
+0

बहुत अच्छा महोदय! यह जोंगो वाक्यविन्यास की तरह है। वास्तव में इच्छा है कि मैं दोनों उत्तरों को स्वीकार कर सकता हूं! –

+0

ग्रेट धन्यवाद दोस्त – nifCody

6

Jongo का उपयोग करके आप as in the shell कर सकते हैं:

db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}}) 

जावा में हो जाता है:

collection.update("{_id:1}").with("{$push:{scores:{type:#, score:#}}}", "quiz", 99); 

कोई फैंसी DBObject ;-)

9

जरूरत mongodb-driver 3.1. के बाद से एक बिल्डर वर्ग com.mongodb.client.model.Updates प्रत्येक अद्यतन मामले के लिए उपयुक्त तरीकों के साथ नहीं है। इस मामले में यह होगा:

Document score = new Document().append("type", "quiz") 
           .append("score",99); 

collection.updateOne(eq("_id", "1"),Updates.addToSet("scores", score)); 
+0

यह रास्ता कम है! नया ड्राइवर इतना सहज है। – KeksArmee

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