अद्यतन: यह उत्तर पुराना प्रतीत होता है; ऐसा लगता है कि सॉर्टिंग से पहले इनपुट दस्तावेज़ों को बदलने के लिए $project
function of the aggregation pipeline का उपयोग कर कस्टम सॉर्टिंग को कम से कम हासिल किया जा सकता है। @ एरी का उत्तर भी देखें।
मुझे नहीं लगता कि यह सीधे संभव है; sort documentation निश्चित रूप से कस्टम तुलना फ़ंक्शन प्रदान करने के किसी भी तरीके का उल्लेख नहीं करता है।
आप क्लाइंट में सॉर्ट करने से शायद सबसे अच्छे हैं, लेकिन यदि आप सर्वर पर ऐसा करने के लिए वास्तव में दृढ़ हैं, तो आप सर्वर पर सॉर्ट चलाने के लिए db.eval()
का उपयोग करने में सक्षम हो सकते हैं (यदि आपका क्लाइंट इसका समर्थन करता है)।
सर्वर साइड प्रकार:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
बराबर क्लाइंट साइड तरह बनाम:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
ध्यान दें कि यह भी एक aggregation pipeline के माध्यम से सॉर्ट करने के लिए संभव है और $orderby
operator (यानी अलावा करने के लिए से .sort()
) हालांकि इन तरीकों में से कोई भी आपको एक कस्टम सॉर्ट फ़ंक्शन प्रदान करने देता है।
मैं एक ही मुद्दे में चल रहा हूँ। क्या आप इसे सर्वर के पक्ष में पूरा करने के लिए एक रास्ता खोजने में सक्षम थे? मुझे वास्तव में क्लाइंट पर ऐसा करने की ज़रूरत नहीं है, या अतिरिक्त फ़ील्ड जोड़ें। –