MongoDB में दिनांक के अनुसार संग्रह कैसे सॉर्ट करें?


125

मैं Node.JS के साथ MongoDB का उपयोग कर रहा हूं। मेरे पास एक संग्रह है जिसमें एक तिथि और अन्य पंक्तियाँ हैं। तारीख एक जावास्क्रिप्ट Dateवस्तु है।

मैं इस संग्रह को दिनांक के अनुसार कैसे सॉर्ट कर सकता हूं?


1
simple, collection.find (); सॉर्ट ({datefield: 1}, फ़ंक्शन (इरेटी, कर्सर) {...}); या आप collection.find () (सॉर्ट ({datefield: -1}), फ़ंक्शन (इरेटी, कर्सर) {...}) का भी उपयोग कर सकते हैं;
अतुल जैन

ध्यान दें कि आपको एक dateकॉलम की आवश्यकता नहीं हो सकती है : stackoverflow.com/questions/5125521/…
phil294

जवाबों:


186

@JohnnyHK उत्तर के लिए बस थोड़ा सा संशोधन

collection.find().sort({datefield: -1}, function(err, cursor){...});

कई उपयोग के मामलों में हम नवीनतम रिकॉर्ड वापस करना चाहते हैं (जैसे नवीनतम अपडेट / आवेषण के लिए)।


1
फंक्शन में क्या डालने का इरादा है? Dateबिना किसी फ़ंक्शन के ऑब्जेक्ट पर सॉर्ट करने की कोशिश करना मेरे लिए 2.6.3 पर काम नहीं कर रहा है।
सैम ब्राइटमैन

@SamBrightman यह फ़ंक्शन केवल कॉलबैक है। क्वेरी परिणाम के साथ आप जो भी करना चाहते हैं, आप उस तर्क को अपने कॉलबैक के अंदर डालते हैं। आप कॉलबैक क्या हैं और वे घटना आधारित प्रोग्रामिंग सीखने के लिए कैसे काम करते हैं, इस पर अधिक पढ़ सकते हैं।
सुशांत गुप्ता

यकीन है, मुझे पता है कि एक कॉलबैक क्या है। मैंने केवल प्रश्न में छंटनी की आवश्यकता देखी और सभी उत्तर कॉलबैक देते हैं। उसी समय, छँटाई मेरे लिए काम नहीं कर रही थी, इसलिए मुझे लगा कि शायद आपको फंक्शन में अतिरिक्त काम करना है।
सैम ब्राइटमैन

1
@SBBrightman ओह ठीक है। सुविधा के लिए आपको स्पष्ट और श्रृंखला दी जा सकती है जैसेcollection.find().sort(...).exec(function(err, cursor) {})
सुशांत गुप्ता

5
यह कहता है कि सॉर्ट () केवल 1 तर्क लेता है
जितेंद्र पंचोली

39

तिथि के अनुसार छाँटने के लिए कुछ विशेष की आवश्यकता नहीं होती है। संग्रह के वांछित दिनांक क्षेत्र के अनुसार क्रमबद्ध करें।

1.4.28 नोड। जेएस मूल चालक के लिए अद्यतन, आप आरोही को सॉर्ट कर सकते हैं datefield निम्न तरीकों में से किसी का उपयोग करके हैं:

collection.find().sort({datefield: 1}).toArray(function(err, docs) {...});
collection.find().sort('datefield', 1).toArray(function(err, docs) {...});
collection.find().sort([['datefield', 1]]).toArray(function(err, docs) {...});
collection.find({}, {sort: {datefield: 1}}).toArray(function(err, docs) {...});
collection.find({}, {sort: [['datefield', 1]]}).toArray(function(err, docs) {...});

'asc' या 'ascending' स्थान पर भी इस्तेमाल किया जा सकता है 1

तरह उतरते, उपयोग करने के लिए 'desc', 'descending'या -1के स्थान पर 1


मैं उपयोक्तानाम क्षेत्र पर उपरोक्त समाधान लागू कर रहा हूं, यह ठीक काम कर रहा है लेकिन यह संवेदनशील है कि इसे कैसे अनदेखा करें?
राहुल मैट

बहु के साथ सही उत्तर (y)
abdulbarik

29
db.getCollection('').find({}).sort({_id:-1}) 

यह प्रविष्टि की तारीख के आधार पर आपके संग्रह को अवरोही क्रम में छाँटेगा


16

सुशांत गुप्ता के जवाब थोड़े पुराने हैं और अब काम नहीं करते।

निम्नलिखित स्निपेट अब इस तरह होना चाहिए:

collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});


@ जॉननी स्वीट। मुझे सटीक परिदृश्य याद नहीं है, लेकिन पिछली गर्मियों में मैं सुशांत के स्निपेट के साथ काम करने की कोशिश कर रहा था और यह मेरे लिए काम नहीं कर रहा था। शायद ऐसा इसलिए है क्योंकि इसमें toArrayभाग की कमी थी ।
3

यह वास्तव में एक गलत उत्तर है, यह नोड में गलत परिणाम देता है। जेएस
डेविड ए

12

यह मेरे लिए काम किया:

collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });

Node.js, Express.js और भिक्षु का उपयोग करना



5

आम के साथ यह उतना ही सरल है:

collection.find().sort('-date').exec(function(err, collectionItems) {
  // here's your code
})

4

अतिरिक्त वर्ग [] ब्रैकेट को काम करने के लिए पैरामीटर छँटाई के लिए आवश्यक है।

collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});

2

यदि आपका दिनांक प्रारूप इस प्रकार है: 14/02/1989 ----> आपको कुछ समस्याएं मिल सकती हैं

आपको इस तरह ISOdate का उपयोग करने की आवश्यकता है:

var start_date = new Date(2012, 07, x, x, x); 

-----> परिणाम ------> ISODATE ("2012-07-14T08: 14: 00.201Z")

अब बस इस तरह क्वेरी का उपयोग करें:

 collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}

बस :)


2

मैंगोज़ के साथ मैं'Array 'का उपयोग करने में सक्षम नहीं था, और यह त्रुटि हो रही थी: TypeError: Collection.find(...).sort(...).toArray is not a function. TheArray फ़ंक्शन मूल निवासी MongoDB NodeJS ड्राइवर ( संदर्भ से Cursor वर्ग पर मौजूद है) ) ।

इसके अलावा सॉर्ट केवल एक पैरामीटर को स्वीकार करता है, इसलिए आप इसके अंदर अपना फ़ंक्शन पास नहीं कर सकते।

इसने मेरे लिए काम किया (जैसा कि एमिल द्वारा उत्तर दिया गया है ):

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.