मेरे पास एक दस्तावेज है:
{ 'प्रोफाइल_सेट': [{'नाम': 'निक', 'विकल्प': 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
Post a Comment