MongoDB में $set और upsert से डॉक्यूमेंट अपडेट या इन्सर्ट करें
जब आप चाहते हैं कि डॉक्यूमेंट मिलने पर अपडेट हो और न मिलने पर नया बने, तो $set ऑपरेटर के साथ upsert: true का उपयोग करें।
कलेक्शन बनाएं और डॉक्यूमेंट इन्सर्ट करें
> db.updateWithUpsertDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a61c345990cee87fd890") }
> db.updateWithUpsertDemo.insertOne({"StudentFirstName":"Larry","StudentAge":23});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a624345990cee87fd891") }
> db.updateWithUpsertDemo.insertOne({"StudentFirstName":"David","StudentAge":24});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a62c345990cee87fd892") }
सभी डॉक्यूमेंट देखें
> db.updateWithUpsertDemo.find().pretty();
{
"_id": ObjectId("5cd2a61c345990cee87fd890"),
"StudentFirstName": "John",
"StudentAge": 21
}
{
"_id": ObjectId("5cd2a624345990cee87fd891"),
"StudentFirstName": "Larry",
"StudentAge": 23
}
{
"_id": ObjectId("5cd2a62c345990cee87fd892"),
"StudentFirstName": "David",
"StudentAge": 24
}
अपसर्ट ऑपरेशन: मौजूदा डॉक्यूमेंट अपडेट करें
> db.updateWithUpsertDemo.update(
{_id: ObjectId("5cd2a624345990cee87fd891")},
{"$set": {"StudentFirstName": "Chris"}},
{upsert: true}
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
अपडेट के बाद चेक करें
> db.updateWithUpsertDemo.find().pretty();
{
"_id": ObjectId("5cd2a61c345990cee87fd890"),
"StudentFirstName": "John",
"StudentAge": 21
}
{
"_id": ObjectId("5cd2a624345990cee87fd891"),
"StudentFirstName": "Chris",
"StudentAge": 23
}
{
"_id": ObjectId("5cd2a62c345990cee87fd892"),
"StudentFirstName": "David",
"StudentAge": 24
}
कैसे काम करता है
- क्वेरी पार्ट (
_id) से डॉक्यूमेंट ढूंढा जाता है $setसे निर्दिष्ट फ़ील्ड अपडेट होती हैupsert: trueसे डॉक्यूमेंट न मिलने पर नया बनता है- क्वेरी और अपडेट दोनों पार्ट मिलकर नए डॉक्यूमेंट का स्ट्रक्चर बनाते हैं