मानगो में, मैं तिथि के अनुसार कैसे छाँट सकता हूँ? (Node.js)


161

मान लें कि मैं इस प्रश्न को मानगो में चलाता हूं:

Room.find({}, function(err,docs){

}).sort({date:-1}); 

यह काम नहीं करता है!

जवाबों:


429

Mongoose में छंटनी इस तरह के रिलीज पर विकसित हुई है कि इनमें से कुछ उत्तर अब मान्य नहीं हैं। मानगो की 4.1.x रिलीज के अनुसार, dateमैदान पर एक अवरोही क्रम निम्न में से किसी भी तरीके से किया जा सकता है:

Room.find({}).sort('-date').exec(function(err, docs) { ... });
Room.find({}).sort({date: -1}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'desc'}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'descending'}).exec(function(err, docs) { ... });
Room.find({}).sort([['date', -1]]).exec(function(err, docs) { ... });
Room.find({}, null, {sort: '-date'}, function(err, docs) { ... });
Room.find({}, null, {sort: {date: -1}}, function(err, docs) { ... });

एक आरोही प्रकार के लिए, छोड़ -के स्ट्रिंग संस्करण या उपयोग मूल्यों पर उपसर्ग 1, ascया ascending


1
विभिन्न तरीकों से टन दिखाने के लिए यह किया जा सकता है। हालाँकि, मैं डॉक्स में यह नहीं ढूँढ सकता कि क्वेरी # खोज में कई तर्क होंगे। हस्ताक्षर है Query#find([criteria], [callback])। मैंने सोचा कि शायद कुछ गुप्त हैंडशेक थे जो कहते हैं कि "मानदंड" तीन तर्कों तक हो सकते हैं, लेकिन यह "ऑब्जेक्ट" के रूप में प्रकार को सूचीबद्ध करता है।
नटोमामी

@ नाटेओमी आप findडॉक्स में गलत तरीके को देख रहे हैं । देख लो Model.find
जॉनीएचके

1
आप सही हे। मैंने देखा कि वे Module#propertyअंकन का उपयोग कर रहे थे और खोज रहे थे #find। ऐसा लगता है कि डॉक्स को नेविगेट करने या खोजने का कोई आसान तरीका नहीं है। 187 परिणाम प्राप्त करने के लिए खोज।
नटोमामी

2
आप _idफ़ील्ड द्वारा भी सॉर्ट कर सकते हैं । उदाहरण के लिए, सबसे हालिया रिकॉर्ड प्राप्त करने के लिए, आप कर सकते हैं:await db.collection.findOne().sort({ _id: -1 });
माइक के

53

सही जवाब है:

Blah.find({}).sort({date: -1}).execFind(function(err,docs){

});

13
ऊपर दिए गए उदाहरण के लिए अद्यतन सॉर्ट सिंटैक्स है: सॉर्ट ('- तारीख') mongoosejs.com/docs/api.html#query_Query-sort
emilebaizel

3
यह एक मेरे लिए काम नहीं किया। मुझे एक त्रुटि मिल रही है "User.find (...)। सॉर्ट (...)। निष्‍पादन एक कार्य नहीं है"
संदीप सूबेदार

12

आज इस समस्या से निपटने के लिए Mongoose 3.5 (.2) का उपयोग कर रहे हैं और किसी भी उत्तर ने मुझे इस मुद्दे को हल करने में बहुत मदद नहीं की है। निम्न कोड स्निपेट ट्रिक करता है

Post.find().sort('-posted').find(function (err, posts) {
    // user posts array
});

आप किसी भी मानक पैरामीटर को भेज सकते हैं, जिसकी आपको आवश्यकता होती है find()(जैसे जहाँ खंड और रिटर्न फ़ील्ड) लेकिन कोई कॉलबैक नहीं । कॉलबैक के बिना यह एक क्वेरी ऑब्जेक्ट देता है जिस पर आप चेन sort()करते हैं। आपको find()फिर से कॉल करने की आवश्यकता है (अधिक मापदंडों के साथ या बिना - दक्षता कारणों के लिए किसी की आवश्यकता नहीं होनी चाहिए) जो आपको अपने कॉलबैक में परिणाम सेट करने की अनुमति देगा।


4

मैं यह करता हूँ:

Data.find( { $query: { user: req.user }, $orderby: { dateAdded: -1 } } function ( results ) {
    ...
})

यह सबसे हाल की चीजों को पहले दिखाएगा।


1
$orderbyMongoDB 3.2 में पदावनत किया गया है, इसलिए इसे अब उपयोग नहीं किया जाना चाहिए।
जॉनी एचएचके

4
Post.find().sort({date:-1}, function(err, posts){
});

साथ ही काम करना चाहिए

संपादित करें:

यदि आपको त्रुटि मिलती है तो आप इसका उपयोग करने का भी प्रयास कर सकते हैं sort() only takes 1 Argument:

Post.find({}, {
    '_id': 0,    // select keys to return here
}, {sort: '-date'}, function(err, posts) {
    // use it here
});

1
यह मुझे त्रुटि देता है:Error: sort() only takes 1 Argument
mr

@LukeXF कृपया अद्यतन उत्तर देखें। मुझे आशा है कि यह आपकी मदद करता है :)
16

@ इस तरह होना चाहिए: Post.find({}, {'_id': 0}).sort("-date").function(err, posts){});
मुस्तफा ग़दीमी

2

लघु समाधान:

const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }

Room.find(query, projection, options).exec(function(err, docs) { ... });

1

देखें कि क्या यह मदद करता है> मोंगो में कैसे छाँटें?

इसे भी पढ़ें> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order


यह पहला तरीका काम नहीं करता है। यह सिर्फ लटका हुआ है ... मुझे लगता है कि यह मूंगोज़ में अपडेट के कारण है .... और दूसरा तरीका सिर्फ मोंगो डॉक्स है, जिसके बारे में मुझे पता है।
TIMEX

फ़ंक्शन () फ़ंक्शन MongoDB फ़ंक्शन है, न कि Mongoose। कृपया अधिक विवरणों के लिए Mongoose API पेज पढ़ें। आप Mongoose के साथ MongoDB डॉक्स में परिभाषित सिंटैक्स का उपयोग कर सकते हैं। यही कारण है कि Mongoose की अपनी छँटाई या प्रतिच्छेदन क्वेरी नहीं है।
neebz

0

आप _idफ़ील्ड द्वारा भी सॉर्ट कर सकते हैं । उदाहरण के लिए, सबसे हालिया रिकॉर्ड पाने के लिए, आप कर सकते हैं,

const mostRecentRecord = await db.collection.findOne().sort({ _id: -1 });

यह बहुत जल्दी है, क्योंकि मैं शर्त लगाने के लिए तैयार हूं कि आपका dateक्षेत्र अनुक्रमित नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.