2015-10-29 23 views
11

मैं एक मोंगोडीबी दस्तावेज़ में एक से अधिक फ़ील्ड में अपडेट करने का प्रयास कर रहा हूं, लेकिन केवल एक फ़ील्ड अपडेट किया गया है। मेरे पास एक संग्रह है उपयोगकर्ता, जिसमें उपयोगकर्ता ग्राहक_user_id द्वारा विशिष्ट रूप से परिभाषित किए गए हैं। मैं एक निश्चित उपयोगकर्ता के जन्म_year और देश फ़ील्ड अपडेट करना चाहता हूं।जावा + मोंगोडीबी: दस्तावेज़ में एकाधिक फ़ील्ड अपडेट करना

यह मैं क्या कर रहा हूँ है:

// Define the search query: 
DBCollection col = md.getDb().getCollection("user"); 
BasicDBObject searchQuery = new BasicDBObject("customer_user_id", customer_user_id); 

// Define the update query: 
BasicDBObject updateQuery = new BasicDBObject(); 
updateQuery.append("$set", new BasicDBObject().append("birth_year", birth_year); 
updateQuery.append("$set", new BasicDBObject().append("country", country); 

log.info("Update query: " + updateQuery); 
col.update(searchQuery, updateQuery); 

दुर्भाग्य से, केवल देश क्षेत्र अद्यतन किया जाता है, और लॉग इन updateQuery इस तरह दिखता है:

अद्यतन क्वेरी: { "$ सेट ": {" देश ":" ऑस्ट्रिया "}}

उत्तर

12

मैं इसे सत्यापित नहीं कर सकता लेकिन शायद आपको यह प्रयास करना चाहिए:

BasicDBObject updateFields = new BasicDBObject(); 
updateFields.append("birth_year", birth_year); 
updateFields.append("country", country); 
BasicDBObject setQuery = new BasicDBObject(); 
setQuery.append("$set", updateFields); 
col.update(searchQuery, setQuery); 

या यह बहुत ही है मुझे लगता है कि:

updateQuery.put("$set", new BasicDBObject("country",country).append("birth_year", birth_year)); 
+0

@wawek उपयोग कर सकते हैं, मैं अपने दृष्टिकोण और दस्तावेज़ के क्षेत्र में से कोई भी कोशिश कर रहा हूँ अद्यतन नहीं है मैं '_id' द्वारा दस्तावेज़ों से पूछताछ कर रहा हूं, जो मौजूद हैं और विशिष्ट फ़ील्ड के अद्यतन को धक्का देने की कोशिश कर रहा है लेकिन कुछ भी नहीं होता है। कोड: 'BasicDBObject searchQry = new BasicDBObject (" _ id ", epid); BasicDBObject updateFields = new BasicDBObject(); अद्यतन फ़ील्ड .append ("isExpired", सच); अद्यतन फ़ील्ड्सएपेंड ("fetchStatus", FetchStatus.FETCHED.getID()); BasicDBObject setQuery = new BasicDBObject(); setQuery.append ("$ set", updateFields); अद्यतन रीसेट अपडेट्स = डीबीसी_एपिसोड्स.अपडेट एक (सर्चक्री, सेटक्वायर); ' –

1

MongoDB 3.4 के लिए आप

MongoCollection<Document> collection = database.getCollection(nameOfCollection); 
Bson filter = new Document("SearchKey", Value); 
Bson newValue = new Document("UpdateKey1", "Value1").append("UpdateKey2", "Value2")....;  
Bson updateOperationDocument = new Document("$set", newValue); 
collection.updateMany(filter, updateOperationDocument); 
+0

हाँ .. यह नया तरीका है। – FaithReaper

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