यहां सभी संभावित मामलों की व्याख्या करने के लिए, प्रत्येक दस्तावेज़ मामले पर विचार करें:
यदि आपका दस्तावेज़ बदलने के लिए ऐसा दिखता है:
{
"_id": "efgh",
"name": "Jerry"
}
फिर इस तरह का एक अपडेट स्टेटमेंट:
db.collection.update(
{ "_id": "efgh" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
इसमें परिणाम:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}
तो सरणी बनाई जाती है और नया आइटम जोड़ा जाता है।
अगर आपके दस्तावेज़ में पहले से ही इस तरह की एक सरणी है:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
}
]
}
और आप मूल रूप से वही कथन करते हैं:
db.collection.update(
{ "_id": "abcd" },
{ "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
)
फिर नई दस्तावेज़ सामग्री को मौजूदा सरणी में जोड़ दिया जाता है:
{
"_id": "abcd",
"name": "Tom",
"myArray": [
{
"field1": "",
"field2": ""
},
{
"field1": "abc",
"field2": "def"
}
]
}
यदि आपके मूल दस्तावेज़ में नामित फ़ील्ड है, लेकिन यह एक सरणी नहीं है, तो इस तरह:
{
"_id": "efgh",
"name": "Jerry",
"myArray": 123
}
फिर सुनिश्चित करें कि यह क्वेरी कंडीशन में परीक्षण करके और का उपयोग करके एक सरणी नहीं है। $set
इसके बजाय:
db.collection.update(
{ "_id": "efgh", "myArray.0": { "$exists": false } },
{ "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
)
यह उस तत्व को सुरक्षित रूप से अधिलेखित कर देगा जो आपकी सामग्री वाली एक नई सरणी के साथ एक सरणी नहीं है (डॉट नोटेशन "myArray.0" का अर्थ पहला सरणी तत्व है, जो सत्य नहीं है)। परिणाम मूल जैसा ही है:
{
"_id": "efgh",
"name": "Jerry",
"myArray": [
{
"field1": "abc",
"field2": "def"
}
]
}