दस्तावेज़ों को प्राकृतिक क्रम में संग्रहित किया जाता है
<ब्लॉकक्वॉट>दस्तावेज़ दिनांक के आधार पर अवरोही क्रम में संग्रहीत किए जाते हैं। इसलिए संग्रह में पहले दस्तावेज़ के रूप में 20140731 है।
जब तक आप एक कैप्ड संग्रह का उपयोग नहीं कर रहे हैं, तब तक डिस्क पर दस्तावेज़ों के क्रम की कोई गारंटी नहीं है (जिसे प्राकृतिक क्रम भी कहा जाता है)।
दस्तावेज़ हटाना और स्थानांतरित करना (जब कोई दस्तावेज़ अपने आवंटित रिकॉर्ड स्थान को बढ़ा देता है) मुक्त सूची में स्थान बनाता है जिसका पुन:उपयोग किया जाएगा।
यहां एक त्वरित उदाहरण दिया गया है जो इसे mongo
. में प्रदर्शित करना चाहिए खोल:
// Start with an empty database & collection
use demodb; db.dropDatabase(); db.order.drop()
// Add some test data
for (i=0; i<1000; i++) {
db.order.insert({'i': i})
}
// Looks like insertion order! (0..9)
db.order.find({}).limit(10);
// Pause 5s for effect :)
sleep(5000);
// Remove half the entries
db.order.remove({ i: { $lt: 500 }})
// Re-add the missing entries
for (i=0; i<500; i++) {
db.order.insert({'i': i})
}
// Not the entries you expected .. space from deleted records was reused
db.order.find({}).limit(10)
// Clean up demodb
db.dropDatabase()
परिणामों का क्रम
<ब्लॉकक्वॉट>जब मैं फ़िल्टर {$gte:20140720, $lte:20140731} के साथ खोज कमांड का उपयोग करता हूं, तो mongodb क्वेरी को "तारीख" फ़ील्ड के आरोही क्रम में वापस लौटाता है।
यदि किसी क्वेरी के लिए अनुक्रमणिका का उपयोग किया जाता है, तो दस्तावेज़ों को अनुक्रमणिका में पाए जाने के क्रम में वापस कर दिया जाता है। सामान्य प्रश्नों के लिए अपनी अनुक्रमणिका बनाते समय आपको इसका लाभ उठाना चाहिए (देखें:क्वेरी परिणामों को क्रमबद्ध करने के लिए अनुक्रमणिका का उपयोग करें)।
FYI करें, एक साधारण अनुक्रमणिका (उदा. {date:1}
. पर) ) का उपयोग आरोही या अवरोही क्रम में छांटे गए परिणामों को वापस करने के लिए किया जा सकता है।
ऑब्जेक्ट आईडी के अनुसार क्रमित करें
यदि आप _id
. के लिए MongoDB के डिफ़ॉल्ट ObjectIDs का उपयोग कर रहे हैं , आप { _id: 1 }
. द्वारा क्रमबद्ध कर सकते हैं ObjectID
. के पहले 4 बाइट्स के बाद से इंसर्शन ऑर्डर का अनुमान लगाने के लिए एक टाइमस्टैम्प शामिल करें। यदि आप इसका उपयोग date
. के आधार पर किसी क्वेरी को छांटने के लिए करना चाहते हैं और अनुमानित प्रविष्टि आदेश आप {date:1, _id:1}
. पर एक अनुक्रमणिका सुनिश्चित करेंगे ।
ध्यान दें कि ObjectID
s आमतौर पर क्लाइंट ड्राइवर द्वारा जेनरेट किए जाते हैं, इसलिए यदि आपके ऐप सर्वर (या _id
) पर क्लॉक ड्रिफ्ट है। दस्तावेज़ डालने से कुछ समय पहले बनाया गया है) ObjectID
s सर्वर द्वारा देखे गए "सम्मिलन आदेश" को कड़ाई से प्रतिबिंबित नहीं कर सकता है। यदि प्रविष्टि आदेश की सटीकता अत्यधिक महत्वपूर्ण है, तो आमतौर पर _id
. उत्पन्न करना संभव है सर्वर-साइड पर (दृष्टिकोण ड्राइवर के आधार पर भिन्न होता है)।