मुझे पता है कि इस सवाल से पहले पूछा गया है, लेकिन यह एक अलग परिदृश्य है। मैं इस तरह एक संग्रह है करना चाहते हैं:क्या एक प्रश्न के साथ सूची को अपरिवर्तित करने का कोई तरीका है?
{
"_id" : ObjectId("4c28f62cbf8544c60506f11d"),
"pk": 1,
"forums": [{
"pk": 1,
"thread_count": 10,
"post_count": 20,
}, {
"pk": 2,
"thread_count": 5,
"post_count": 24,
}]
}
मुझे क्या करना चाहते हैं एक "मंच" आइटम Upsert करने, काउंटर incrementing या अगर यह मौजूद नहीं है एक आइटम जोड़ने है।
उदाहरण (मुझे आशा है कि यह समझ में आता है) इस तरह कुछ करने के लिए के लिए:
db.mycollection.update({
"pk": 3,
"forums.pk": 2
}, {
"$inc": {"forums.$.thread_count": 1},
"$inc": {"forums.$.post_count": 1},
}, true)
और है:
-
:
- पूरे संग्रह को एक नए आइटम के साथ उपरोक्त करें
- फ़ोरम आइटम जोड़ें
db.mycollection.update({pk:3}, {pk:3}, true) db.mycollection.update({pk:3}, {$addToSet: {forums: {pk:2}}}) db.mycollection.update({pk:3, 'forums.pk': 2}, {$inc: {'forums.$.thread_counter': 1, {'forums.$.post_counter': 1}})
आप यह करने के लिए एक अधिक कुशल तरीका के बारे में पता कर रहे हैं: सूची
स्थितीय ऑपरेटर
{
"_id" : ObjectId("4c28f62cbf8544c60506f11d"),
"pk": 1,
"forums": [{
"pk": 1,
"thread_count": 10,
"post_count": 20,
}, {
"pk": 2,
"thread_count": 5,
"post_count": 24,
}]
},
{
"_id" : ObjectId("4c28f62cbf8544c60506f11e"),
"pk": 3,
"forums": [{
"pk": 2,
"thread_count": 1,
"post_count": 1,
}]
}
मैं निश्चित रूप से यह तीन चरणों में कर सकते हैं
कहना है कि साथ
हाँ, मैंने इसे समझ लिया। फिर भी धन्यवाद। – Germano