मैं लौटी वस्तुओं की संख्या को कैसे सीमित करूं?


113
myModel.find({}, function(err, items) {
    console.log(items.length);    // Big number
});

मैं लौटी हुई वस्तुओं को केवल उन नवीनतम 10 वस्तुओं तक कैसे सीमित कर सकता हूं जिन्हें डाला गया था?

जवाबों:


188

नवीनतम मानस में (लेखन के समय 3.8.1), आप दो काम अलग-अलग तरीके से करते हैं: (1) आपको सॉर्ट करने के लिए एक तर्क पास करना होगा (), जो कि एक अड़चन या सिर्फ एक बाधा होना चाहिए, और (2) ) execFind () चला गया है, और इसके स्थान पर निष्‍पादन () किया गया है। इसलिए, 3.8.1 मूंग के साथ आप ऐसा करेंगे:

var q = models.Post.find({published: true}).sort({'date': -1}).limit(20);
q.exec(function(err, posts) {
     // `posts` will be of length 20
});

या आप इसे उसी तरह एक साथ चेन कर सकते हैं:

models.Post
  .find({published: true})
  .sort({'date': -1})
  .limit(20)
  .exec(function(err, posts) {
       // `posts` will be of length 20
  });

{'तारीख': -1} का क्या मतलब है? अग्रिम में धन्यवाद!
कुरुमांक

3
@ArslArsl - परिणाम क्रम में तारीख से हल हो जाएंगे।
एनएल लॉन्ग

@ArslArsl यह निम्नलिखित के समान है { date: 'desc' } {date: 'descending'}:। इस उत्तर को
रोटिमी-बेस्ट

क्या सीमा के लिए अधिकतम है?
lukas_o

20

इस तरह, .limit () का उपयोग कर:

var q = models.Post.find({published: true}).sort('date', -1).limit(20);
q.execFind(function(err, posts) {
  // `posts` will be of length 20
});

2
बहुत बहुत धन्यवाद, पता नहीं था कि आप इस तरह से प्रश्न कर सकते हैं। इस निष्पादन विधि के बारे में मुझे कुछ दस्तावेज कहां मिल सकते हैं?
कछुए

ईमानदारी से, मैं सिर्फ उदाहरणों और सामानों के साथ-साथ परीक्षण मामलों के उदाहरणों को देखता हूं। मेलिंग लिस्ट भी अच्छी है। वास्तविक डॉक्स थोड़ा पुराना लगता है।
kcbanner

1
अभी भी mongoosejs के नवीनतम संस्करण में है?
मैनी

2
@ मैनी यह नहीं है। अद्यतन संस्करण के लिए मार्नी का उत्तर देखें।
जॉनीएचके

15

मैं थोड़ा आलसी हूं, इसलिए मुझे साधारण चीजें पसंद हैं:

let users = await Users.find({}, null, {limit: 50});

8
models.Post.find({published: true}, {sort: {'date': -1}, limit: 20}, function(err, posts) {
 // `posts` with sorted length of 20
});

5
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें यह भी बताया गया है कि यह समस्या कैसे और क्यों हल करती है वास्तव में आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद करेगी । याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न कि केवल उस व्यक्ति से जो अब पूछ रहा है! कृपया स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, और इस बात का संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
टोबे स्पाइट

2

मापदंडों का पता लगाएं

पैरामीटर पाते हैं कि फ़ंक्शन निम्नानुसार हैं:

  1. शर्तेँ «Object»
  2. [प्रक्षेपण] «Object|String»वैकल्पिक क्षेत्रों में लौटने के लिए, देखें Query.prototyp.select ()
  3. [विकल्प] «Object»वैकल्पिक देखें Query.prototyp.setOptions ()
  4. [वापस कॉल करें] «Function»

कैसे सीमित करें?

const Post = require('./models/Post');

Post.find(
  { published: true }, 
  null, 
  { sort: { 'date': 'asc' }, limit: 20 },
  function(error, posts) {
   if (error) return `${error} while finding from post collection`;

   return posts; // posts with sorted length of 20
  }
);

अधिक जानकारी

Mongoose आपको अपने संग्रह को विभिन्न तरीकों से क्वेरी करने की अनुमति देता है जैसे: आधिकारिक दस्तावेज़ीकरण

// named john and at least 18
MyModel.find({ name: 'john', age: { $gte: 18 }});

// executes, passing results to callback
MyModel.find({ name: 'john', age: { $gte: 18 }}, function (err, docs) {});

// executes, name LIKE john and only selecting the "name" and "friends" fields
MyModel.find({ name: /john/i }, 'name friends', function (err, docs) { })

// passing options
MyModel.find({ name: /john/i }, null, { skip: 10 })

// passing options and executes
MyModel.find({ name: /john/i }, null, { skip: 10 }, function (err, docs) {});

// executing a query explicitly
var query = MyModel.find({ name: /john/i }, null, { skip: 10 })
query.exec(function (err, docs) {});

// using the promise returned from executing a query
var query = MyModel.find({ name: /john/i }, null, { skip: 10 });
var promise = query.exec();
promise.addBack(function (err, docs) {});

1

किसी कारण से मुझे प्रस्तावित उत्तरों के साथ काम करने के लिए यह नहीं मिला, लेकिन मैंने चयन के लिए एक और भिन्नता पाई, जो मेरे लिए काम की:

models.Post.find().sort('-date').limit(10).select('published').exec(function(e, data){
        ...
});

क्या एपी शायद बदल गया है? मैं संस्करण 3.8.19 का उपयोग कर रहा हूं


1

... इसके अतिरिक्त उपयोग करना सुनिश्चित करें:

mongoose.Promise = Promise;

यह मूल ES6 वादे के लिए आम वादे को निर्धारित करता है। इस अतिरिक्त के बिना मुझे मिला:

DeprecationWarning: Mongoose: mpromise (mongoose का डिफ़ॉल्ट वादा पुस्तकालय) पदावनत है, इसके बजाय अपने स्वयं के वादे पुस्तकालय में प्लग करें: http://mongoosejs.com/docs/promises.html

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