MongoDB update() से पूरा डॉक्यूमेंट रिप्लेस करना
update() में दूसरा पैरामीटर जब केवल नया डॉक्यूमेंट होता है (कोई ऑपरेटर जैसे $set नहीं), तो यह पूरे डॉक्यूमेंट को रिप्लेस कर देता है। _id फ़ील्ड अपरिवर्तित रहता है।
कलेक्शन बनाएं और डॉक्यूमेंट इन्सर्ट करें
> db.replacingEntireDocumentDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith","StudentCountryName":"US"});
{ "acknowledged": true, "insertedId": ObjectId("5cd3119bb64f4b851c3a13e8") }
डॉक्यूमेंट देखें
> db.replacingEntireDocumentDemo.find().pretty();
{
"_id": ObjectId("5cd3119bb64f4b851c3a13e8"),
"StudentFirstName": "John",
"StudentLastName": "Smith",
"StudentCountryName": "US"
}
पूरा डॉक्यूमेंट रिप्लेस करें
> db.replacingEntireDocumentDemo.update(
{"StudentFirstName":"John","StudentLastName":"Smith","StudentCountryName":"US"},
{"StudentFirstName":"David","StudentLastName":"Miller","StudentCountryName":"AUS"}
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
रिप्लेस के बाद चेक करें
> db.replacingEntireDocumentDemo.find().pretty();
{
"_id": ObjectId("5cd3119bb64f4b851c3a13e8"),
"StudentFirstName": "David",
"StudentLastName": "Miller",
"StudentCountryName": "AUS"
}
महत्वपूर्ण चेतावनी
- _id वही रहता है (ObjectId("5cd3119bb64f4b851c3a13e8"))
- सभी पुराने फ़ील्ड हट जाते हैं - केवल नए डॉक्यूमेंट के फ़ील्ड रहते हैं
- अगर नए डॉक्यूमेंट में कोई फ़ील्ड नहीं है तो वह गायब हो जाता है
- यह
$setसे अलग है जो केवल निर्दिष्ट फ़ील्ड बदलता है
सुरक्षित विकल्प: replaceOne()
MongoDB 3.2+ में स्पष्ट replaceOne() मेथड उपयोग करें:
db.replacingEntireDocumentDemo.replaceOne(
{"StudentFirstName": "John"},
{"StudentFirstName": "David", "StudentLastName": "Miller", "StudentCountryName": "AUS"}
)