दुर्भाग्य से, आप $
. का उपयोग नहीं कर सकते प्रति कुंजी एक से अधिक बार ऑपरेटर, इसलिए आपको बाकी के लिए संख्यात्मक मानों का उपयोग करना होगा। जैसे:
db.myCollection.update({
"id": 1,
"forecasts.forecast-id": 123,
"forecasts.levels.level": "proven",
"forecasts.levels.configs.config": "Custom 1"
},
{"$set": {"forecasts.$.levels.0.configs.0": newData}}
)
नेस्टेड सरणियों को अद्यतन करने के लिए MongoDB का समर्थन खराब है। इसलिए यदि आप डेटा को बार-बार अपडेट करना चाहते हैं, और इसके बजाय एकाधिक संग्रहों का उपयोग करने पर विचार करना चाहते हैं, तो आप उनके उपयोग से बचने के लिए बेहतर हैं।
एक संभावना:forecasts
इसका अपना संग्रह है, और यह मानते हुए कि आपके पास level
. का एक निश्चित सेट है मान, level
make बनाएं एक सरणी के बजाय एक वस्तु:
{
_id: 123,
parentId: 1,
name: "Forecast 1",
levels: {
proven: {
configs: [
{
config: "Custom 1",
variables: [{ x: 1, y:2, z:3}]
},
{
config: "Custom 2",
variables: [{ x: 10, y:20, z:30}]
},
]
},
likely: {
configs: [
{
config: "Custom 1",
variables: [{ x: 1, y:2, z:3}]
},
{
config: "Custom 2",
variables: [{ x: 10, y:20, z:30}]
},
]
}
}
}
फिर आप इसका उपयोग करके इसे अपडेट कर सकते हैं:
db.myCollection.update({
_id: 123,
'levels.proven.configs.config': 'Custom 1'
},
{ $set: { 'levels.proven.configs.$': newData }}
)