आप $set both दोनों का उपयोग नहीं कर सकते और $push नेस्टेड ऑपरेटरों के समान अद्यतन अभिव्यक्ति में।
अद्यतन ऑपरेटरों का उपयोग करने के लिए सही सिंटैक्स निम्नानुसार है:
{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}
जहां <operator1>, <operator2> यहां निर्दिष्ट किसी भी अद्यतन ऑपरेटर सूची से हो सकता है।
सरणी में एक नया तत्व जोड़ने के लिए, एक $push ऑपरेटर पर्याप्त होगा उदा। आप findByIdAndUpdate . का उपयोग कर सकते हैं संशोधित दस्तावेज़ को
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{ "$push": { "childrens": employee._id } },
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
अपने मूल update() का उपयोग करना विधि, वाक्य रचना है
Employeehierarchy.update(
{ "_id": employeeparent._id},
{ "$push": { "childrens": employee._id } },
function (err, raw) {
if (err) return handleError(err);
console.log('The raw response from Mongo was ', raw);
}
);
जिसमें कॉलबैक फ़ंक्शन तर्क प्राप्त करता है (err, raw) जहां
errयदि कोई त्रुटि हुई है तो क्या यह त्रुटि हैrawमोंगो से पूर्ण प्रतिक्रिया है
चूंकि आप संशोधित दस्तावेज़ की जांच करना चाहते हैं, मेरा सुझाव है कि आप findByIdAndUpdate का उपयोग करें update() . के बाद से काम कर रहा है विधि आपको संशोधित दस्तावेज़ नहीं देगी, केवल मोंगो से पूर्ण लेखन परिणाम।
यदि आप दस्तावेज़ में किसी फ़ील्ड को अपडेट करना चाहते हैं और उसी समय एक सरणी में एक तत्व जोड़ना चाहते हैं तो आप ऐसा कर सकते हैं
Employeehierarchy.findByIdAndUpdate(employeeparent._id,
{
"$set": { "name": "foo" },
"$push": { "childrens": employee._id }
}
{ "new": true, "upsert": true },
function (err, managerparent) {
if (err) throw err;
console.log(managerparent);
}
);
उपरोक्त name को अपडेट करेगा फ़ील्ड को "foo" में डालें और कर्मचारी आईडी को childrens . में जोड़ें सरणी।