मोंगोसे में कैसे छाँटें?


154

मुझे इस तरह के संशोधक के लिए कोई डॉक नहीं मिला। इकाई परीक्षणों में एकमात्र अंतर्दृष्टि है: spec.lib.query.js # L12

writer.limit(5).sort(['test', 1]).group('name')

लेकिन यह मेरे लिए काम नहीं करता है:

Post.find().sort(['updatedAt', 1]);

7
इस उत्तर को दिन के उत्तर तक पढ़ें ।
फ्रांसिस्को प्रेसेनिया

जवाबों:


157

Mongoose में, निम्न में से किसी भी तरीके से एक सॉर्ट किया जा सकता है:

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

5
यह फ्रांसिस्को प्रेसेनिया द्वारा लिंक किए गए उत्तर की लगभग एक सीधी प्रतिलिपि है। दुर्भाग्य से उच्चतम मतदान के उत्तर पुराने और अनावश्यक रूप से लंबे हैं।
इविन

2
यह आज की तरह बिल्कुल सही नहीं है। {sort: [['date', 1]]}काम नहीं करेगा, लेकिन .sort([['date', -1]])काम करेगा। इस उत्तर को देखें: stackoverflow.com/a/15081087/404699
स्टीमपॉवरड

@steampowered धन्यवाद, मैं एक संपादन करूँगा, अगर आपने मुझे गलत पाया तो मुझे बताने या संपादित करने के लिए आपका बहुत स्वागत है।
इविन

135

यह है कि मैं कैसे 2.3.0 :) में काम करने के लिए सॉर्ट किया गया

// Find First 10 News Items
News.find({
    deal_id:deal._id // Search Filters
},
['type','date_added'], // Columns to Return
{
    skip:0, // Starting Row
    limit:10, // Ending Row
    sort:{
        date_added: -1 //Sort by Date Added DESC
    }
},
function(err,allNews){
    socket.emit('news-load', allNews); // Do something with the array of 10 objects
})

7
नेवला 3 में आप उपयोग नहीं कर सकते Arrayक्षेत्र चयन अब के लिए - यह हो गया है StringयाObject
pkyeck

4
btw, यदि आप सभी क्षेत्र चाहते हैं, तो आप बस nullउस खंड (कम से कम 3.8 में) में खींच सकते हैं
MalcolmOcean

63

Mongoose 3.8.x के अनुसार:

model.find({ ... }).sort({ field : criteria}).exec(function(err, model){ ... });

कहाँ पे:

criteriaहो सकता है asc, desc, ascending, descending, 1, या-1


52

अपडेट करें:

Post.find().sort({'updatedAt': -1}).all((posts) => {
  // do something with the array of posts
});

प्रयत्न:

Post.find().sort([['updatedAt', 'descending']]).all((posts) => {
  // do something with the array of posts
});

13
नवीनतम Mongoose (2.4.10) में है .sort("updatedAt", -1)
मार्सेल जैकवर्थ

43
और भी नवीनतम मोंगोज़ (3.5.6-पूर्व में, लेकिन मुझे पूरा यकीन है कि यह 3.x के सभी के लिए मान्य है) .sort({updatedAt: -1})या .sort('-updatedAt')
एंड्रियास हॉल्टग्रेन

2
तो फिर तुम का उपयोग करना चाहिए exec(function (posts) {…बजायall
Buzut

मुझे all() must be used after where() when called with these argumentsमोंगोज 4.6.5 में मिला है ...
डैम फा

25

मानगो v5.4.3

आरोही क्रम से क्रमबद्ध करें

Post.find({}).sort('field').exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'asc' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'ascending' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 1 }).exec(function(err, docs) { ... });

Post.find({}, null, {sort: { field : 'asc' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 'ascending' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 1 }}), function(err, docs) { ... });

अवरोही क्रम के अनुसार

Post.find({}).sort('-field').exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'desc' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'descending' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: -1 }).exec(function(err, docs) { ... });


Post.find({}, null, {sort: { field : 'desc' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 'descending' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : -1 }}), function(err, docs) { ... });

विवरण के लिए: https://mongoosejs.com/docs/api.html#query_Query-sort


23

अपडेट करें

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

मूल

मॉडल परmodel दिए गए डॉक्स के अनुसार किसी वस्तु को देखते हुए , यह इस प्रकार काम कर सकता है 2.4.1:

Post.find({search-spec}, [return field array], {options}, callback)

search specएक वस्तु की अपेक्षा करता है, लेकिन आप nullएक खाली वस्तु को पारित या कर सकते हैं ।

दूसरा परम क्षेत्र स्ट्रिंग की एक सरणी के रूप में क्षेत्र सूची है, इसलिए आप आपूर्ति करेंगे ['field','field2']या null

तीसरा परम एक वस्तु के रूप में विकल्प है, जिसमें परिणाम सेट को सॉर्ट करने की क्षमता शामिल है। आप का प्रयोग करेंगे { sort: { field: direction } }जहां fieldस्ट्रिंग FIELDNAME है test(आपके मामले में) और directionएक नंबर है, जहां है 1आरोही जाता है और -1desceding है।

अंतिम पैराम ( callback) कॉलबैक फ़ंक्शन है जो क्वेरी द्वारा लौटाए गए डॉक्स का संग्रह प्राप्त करता है।

Model.find()(इस संस्करण में) कार्यान्वयन गुण वैकल्पिक पैरामीटर को संभालने के लिए की एक रपट आवंटन करता है (जो कि मुझे क्या उलझन में!):

Model.find = function find (conditions, fields, options, callback) {
  if ('function' == typeof conditions) {
    callback = conditions;
    conditions = {};
    fields = null;
    options = null;
  } else if ('function' == typeof fields) {
    callback = fields;
    fields = null;
    options = null;
  } else if ('function' == typeof options) {
    callback = options;
    options = null;
  }

  var query = new Query(conditions, options).select(fields).bind(this, 'find');

  if ('undefined' === typeof callback)
    return query;

  this._applyNamedScope(query);
  return query.find(callback);
};

HTH


प्रक्षेपण के लिए: हमें स्ट्रिंग प्रदान करने की आवश्यकता है जिसमें अंतरिक्ष के साथ स्तंभित नाम हैं।
मैडी


10

Mongoose 4 में क्वेरी बिल्डर इंटरफ़ेस के साथ चेनिंग।

// Build up a query using chaining syntax. Since no callback is passed this will create an instance of Query.
var query = Person.
    find({ occupation: /host/ }).
    where('name.last').equals('Ghost'). // find each Person with a last name matching 'Ghost'
    where('age').gt(17).lt(66).
    where('likes').in(['vaporizing', 'talking']).
    limit(10).
    sort('-occupation'). // sort by occupation in decreasing order
    select('name occupation'); // selecting the `name` and `occupation` fields


// Excute the query at a later time.
query.exec(function (err, person) {
    if (err) return handleError(err);
    console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host
})

प्रश्नों के बारे में अधिक जानकारी के लिए डॉक्स देखें ।


4

मोंगोज़ो के मौजूदा संस्करण (1.6.0) के साथ यदि आप केवल एक कॉलम को छांटना चाहते हैं , तो आपको सरणी को छोड़ना होगा और ऑब्जेक्ट को सीधे सॉर्ट () फ़ंक्शन में पास करना होगा:

Content.find().sort('created', 'descending').execFind( ... );

इस अधिकार को पाने के लिए मुझे कुछ समय लगा :(


धन्यवाद। आपकी पोस्ट ने मेरी मदद की। मैंने भी इसका सामना किया।
user644745

4
app.get('/getting',function(req,res){
    Blog.find({}).limit(4).skip(2).sort({age:-1}).then((resu)=>{
        res.send(resu);
        console.log(resu)
        // console.log(result)
    })
})

उत्पादन

[ { _id: 5c2eec3b8d6e5c20ed2f040e, name: 'e', age: 5, __v: 0 },
  { _id: 5c2eec0c8d6e5c20ed2f040d, name: 'd', age: 4, __v: 0 },
  { _id: 5c2eec048d6e5c20ed2f040c, name: 'c', age: 3, __v: 0 },
  { _id: 5c2eebf48d6e5c20ed2f040b, name: 'b', age: 2, __v: 0 } ]



2

दूसरों ने मेरे लिए काम किया, लेकिन यह किया:

  Tag.find().sort('name', 1).run(onComplete);



1

4.x से शुरू करके क्रमबद्ध तरीकों को बदल दिया गया है। अगर आप> 4.x का उपयोग कर रहे हैं। निम्न में से किसी का उपयोग करके देखें।

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

0
Post.find().sort('updatedAt').exec((err, post) => {...});

1
नमस्ते और समुदाय में आपका स्वागत है। जबकि आपका उत्तर समाधान प्रदान कर सकता है, एक अच्छे उत्तर के लिए कुछ स्पष्टीकरण की आवश्यकता होती है। कृपया कुछ संदर्भ और एक उचित स्पष्टीकरण जोड़ें।
पांडा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.