सामान्य तौर पर:यदि आप बिना किसी क्रमबद्ध क्रम के खोज कर रहे हैं, तो परिणामों की कोई गारंटी नहीं है।
इसके अतिरिक्त, किसी सरणी के आधार पर छाँटना संभव नहीं है (इससे भी कम यदि आप किसी सरणी को वर्णित के अनुसार क्रमबद्ध करना चाहते हैं)। एक सॉर्ट() आपके परिणाम दस्तावेज़ों में किसी फ़ील्ड के आधार पर आरोही या अवरोही क्रम निर्धारित करने के लिए तार्किक तुलना का उपयोग करता है।
आपको अपने स्वयं के एप्लिकेशन कोड में किसी भी वांछित कस्टम सॉर्टिंग तर्क को लागू करना होगा।
नए एग्रीगेशन फ्रेमवर्क का लाभ उठाना एक उपयोगी तरीका हो सकता है। MongoDB 2.2 में .. विशेष रूप से, $unwind की क्षमता दस्तावेज़ों की एक धारा में एक सरणी।
उदाहरण के लिए, परीक्षण डेटा को इस रूप में सेट करना:
{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac946b50571321b2f932b"), "a" : [ 5, 4, 9 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }
एक $in
[2,3] पर खोज करने से मेल खाने वाले दस्तावेज़ प्राप्त होंगे:
> db.matches.find({'a': { $in: [2,3]}})
{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }
एकत्रीकरण ढांचे के साथ आप $match
. कर सकते हैं एक ही दस्तावेज़ और फिर कुछ बुनियादी छँटाई प्राप्त करने के लिए परिणामों में हेरफेर करें:$unwind
सरणियाँ, $sort
उन्हें, और फिर $group
ये वापस एक परिणाम में:
db.matches.aggregate(
{ $match : {
a: { $in: [2,3] }
}},
{ $unwind : "$a" },
{ $sort: {
"a": -1
}},
{ $group : {
_id: '$_id',
a: { $addToSet: "$a" }
}}
)
तो इस उदाहरण में, मिलान सरणियों वाले दस्तावेज़ अब सरणी मानों के लिए आरोही क्रम में क्रमबद्ध हैं:
{
"result" : [
{
"_id" : ObjectId("504ac94eb50571321b2f932c"),
"a" : [ 1, 2, 3]
},
{
"_id" : ObjectId("504ac93fb50571321b2f932a"),
"a" : [ 1, 2, 4 ]
},
{
"_id" : ObjectId("504ac954b50571321b2f932d"),
"a" : [ 3, 7, 9 ]
}
],
"ok" : 1
}