संस्करण 2.6 से, MongoDB जहां संभव हो फ़ील्ड के क्रम को सुरक्षित रखता है।
हालांकि, _id
फ़ील्ड हमेशा पहले आता है एक नाम बदलने वाले फ़ील्ड पुनः क्रमित कर सकते हैं। हालांकि, मैं आमतौर पर इस तरह के विवरणों पर भरोसा नहीं करने की कोशिश करता हूं। जैसा कि मूल प्रश्न में उल्लेख किया गया है, विचार करने के लिए अतिरिक्त परतें भी हैं, जिनमें से प्रत्येक को आदेश की स्थिरता के लिए किसी प्रकार की गारंटी प्रदान करनी चाहिए...
मूल उत्तर:
नहीं, MongoDB फ़ील्ड के क्रम की गारंटी नहीं देताए> :
विशेष रूप से, इन-प्लेस अपडेट जो दस्तावेज़ के आकार को बदलते हैं, आमतौर पर फ़ील्ड के क्रम को बदल देंगे। उदाहरण के लिए, यदि आप $set
एक फ़ील्ड जिसका पुराना मान प्रकार संख्या का था और नया मान NumberLong
. है , फ़ील्ड आमतौर पर फिर से क्रमित हो जाते हैं।
हालाँकि, सरणियाँ सही ढंग से क्रम को बनाए रखती हैं:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
मैं नहीं देखता कि यह "बदसूरत" और "फूला हुआ" क्यों है। जटिल वस्तुओं की सूची संग्रहीत करना आसान नहीं हो सकता। हालांकि, वस्तुओं को सूचियों के रूप में गाली देना निश्चित रूप से बदसूरत है:वस्तुओं में सहयोगी सरणी शब्दार्थ होते हैं (अर्थात किसी दिए गए नाम का केवल एक क्षेत्र हो सकता है), जबकि सूचियाँ/सरणी नहीं:
// not ok:
db.foo2.insert({"foo" : "bar", "foo" : "lala" });
db.foo2.find();
{ "_id" : ObjectId("4ef09cd9b37bc3cdb0e7fb26"), "foo" : "lala" }
// a list can do that
db.foo2.insert({ 'array' : [ {'foo' : 'bar'}, { 'foo' : 'lala' } ]});
db.foo2.find();
{ "_id" : ObjectId("4ef09e01b37bc3cdb0e7fb27"), "array" :
[ { "foo" : "bar" }, { "foo" : "lala" } ] }
ध्यान रखें कि MongoDB एक ऑब्जेक्ट डेटाबेस है, कुंजी/मान स्टोर नहीं।