अपने products
में आइटम्स को मानते हुए सरणी अद्वितीय हैं, इस सरणी को क्रमबद्ध क्रम में बनाए रखने के लिए कोई आसान सर्वर-साइड समर्थन नहीं है जैसा कि MongoDB 2.4 पर है। नेस्टेड सरणियों को देखते हुए आपका सबसे अच्छा विकल्प आपके अनुप्रयोग तर्क में सरणियों को उपयुक्त के रूप में क्रमबद्ध करना होगा (अर्थात सम्मिलित/अद्यतन, या पुनर्प्राप्ति/प्रदर्शन पर)।
डेटा मॉडलिंग संबंधी विचार
यदि आपको नेस्टेड सरणी प्रविष्टियों में बहुत अधिक हेरफेर करने की आवश्यकता है, तो आपको काम करना आसान बनाने के लिए अपने डेटा मॉडल को समतल करने पर विचार करना चाहिए। MongoDB के साथ आपका डिज़ाइन लक्ष्य एक डेटा मॉडल होना चाहिए जो आपके एप्लिकेशन उपयोग के मामलों के लिए उपयुक्त हो, जिसमें डालने/अपडेट करने/क्वेरी करने में आसानी के बीच स्वीकार्य प्रदर्शन संतुलन हो। आपको निश्चित रूप से एक संग्रह/क्वेरी में सबकुछ मॉडल करने की ज़रूरत नहीं है यदि ऐसा करने का कोई मतलब नहीं है, और आपको डेटा को असामान्य (डुप्लिकेट) करने के लिए तैयार रहना चाहिए। उत्पाद <=> श्रेणियों जैसे कई-से-अनेक संबंधों के लिए जो भी इकाई कम बार-बार अपडेट की जाती है (उदाहरण के लिए, उत्पादों में श्रेणियां एम्बेड करना) एम्बेड करना और उसे सामान्य बनाना सामान्य है।
सतत क्रमबद्ध, छाया हुआ सरणियाँ (गैर-अद्वितीय आइटम)
यदि आप क्रमबद्ध क्रम में सरणियों को जारी रखना चाहते हैं और आइटम अद्वितीय नहीं हैं, MongoDB 2.4 में $push
एक क्रमबद्ध सरणी के लिए लेकिन इसका उपयोग एक टुकड़ा (सरणी सीमा) के साथ संयोजन में किया जाना चाहिए। अगर आप $push
एक क्रमबद्ध सरणी में समान प्रविष्टियां आप डुप्लीकेट के साथ समाप्त हो जाएंगी (इसलिए यह संभवतः वह नहीं है जो आप बाद में हैं)।
page
. मानकर नमूना अपडेट आपके उदाहरण में संग्रह का नाम था:
db.page.update(
// Query
{ "_id": "56rgt46rt54h68rt4h6" },
// Update sorted array
// NB: referring by array index position 0, as there isn't a named reference
{ $push : {
"categories.0.products" : {
// List of new elements to push
$each : [
{ "name" : "E", "pos": 3 }
],
// Sort by pos (ascending)
$sort : { "pos" : 1 },
// Maximum number of array elements (required for $sort)
$slice : -100
}
}}
)