mongodb - Change an existing object in an array but still preserve key uniqueness -


मेरे पास एक दस्तावेज है:

  { 'प्रोफाइल_सेट': [{'नाम': 'निक', 'विकल्प': 0}, {'नाम': 'जो', 'विकल्प': 2}, {'name': 'burt', 'options': 1}]}  

अगर मैं profile_set केवल के लिए जोड़ नया ऑब्जेक्ट चाहता हूं तो < विकल्प पर ध्यान दिए बिना ऑब्जेक्ट का कोड> नेम पहले ही नहीं लिया गया है, मैं अपने update को एक क्वेरी ऑब्जेक्ट के साथ अर्हता प्राप्त कर सकता हूं जो अपडेट को रोकता है नाम पहले से ही प्रोफ़ाइल_सेट में मौजूद है। खोल में:

  db.coll.update ({_id: id, 'profile_set.name': {$ ne: 'निक'}} , {$ Push: {profile_set: {'name': 'nick', 'options': 2}}})  

इसलिए यह केवल $ push एक मेल के साथ _id और जहां प्रोफ़ाइल_सेट तत्व नहीं है जहां नाम है 'nick'

प्रश्न लेकिन अगर मुझे बाद में निक के नाम को बदलने की जरूरत है (और शायद उसका विकल्प भी ...), तो यह मौजूदा परिवर्तन है सरणी ऑब्जेक्ट, कोई नया जोड़ नहीं क्या ऐसा करने का एक तरीका है कि एक परमाणु अद्यतन कार्रवाई में जो अभी भी नाम

दो शर्तें हैं, मुझे लगता है:

  var newName = "somename"; Var पुराना नाम = "निक"; Var newOption = 3; // यदि नहीं तो नाम db.coll.update ({_id: id, 'profile_set.name': oldName}, {$ set: {"profile_set $। विकल्प": newOption}}) नहीं बदलता है; // यदि नाम बदलते हैं db.coll.update ({_id: id, $ और: [{'profile_set.name': {$ ne: newName}}, {'profile_set.name': oldName}]}, {$ सेट करें: {"profile_set $ .name": नया नाम, "प्रोफाइल_सेट। $ विकल्प": newOption}});  

Comments