আমি কীভাবে প্রত্যাবর্তিত আইটেমের সংখ্যা সীমাবদ্ধ করব?


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

আমি কীভাবে ফিরে আসা আইটেমগুলিকে সর্বাধিক 10 টি আইটেম সন্নিবেশ করিয়েছি?

উত্তর:


188

সর্বশেষতম মঙ্গুজে (লেখার সময় 3.8.1), আপনি দুটি জিনিস আলাদাভাবে করেন: (1) বাছাই করতে আপনাকে একক যুক্তি দিতে হবে (), যা অবশ্যই বাধা বা কেবল একটি সীমাবদ্ধতার অ্যারে এবং (2) ) execFind () চলে গেছে এবং এর পরিবর্তে exec () ব্যবহার করা হবে। অতএব, মঙ্গুজ 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
  });

date 'তারিখ': -1} এর অর্থ কী? আগাম ধন্যবাদ!
কুড়ুমকান

3
@ আরসআরএসএল - ফলাফলগুলি ছদ্মবেশী ক্রমানুসারে সাজানো হবে।
এনএল লং

@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
মৃত্যুদন্ড কার্যকর এখনও মঙ্গুজের সর্বশেষ সংস্করণে আছে?
মানি

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»ফিরতে alচ্ছিক ক্ষেত্রগুলি দেখুন, ক্যোরি.প্রোটোটাইপ.সलेक्ट নির্বাচন করুন ()
  3. [অপশনগুলি] alচ্ছিক«Object» দেখুন Query.prototype.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
  }
);

অতিরিক্ত তথ্য

মঙ্গুজ আপনাকে আপনার সংগ্রহগুলি বিভিন্নভাবে জিজ্ঞাসা করতে দেয় যেমন: অফিশিয়াল ডকুমেন্টেশন

// 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 প্রতিশ্রুতি সেট করে। এই সংযোজন ছাড়া আমি পেয়েছি:

অবমাননাকরণ সতর্কতা: মঙ্গুজ: এমপ্রোমিজ (মঙ্গুজের ডিফল্ট প্রতিশ্রুতি লাইব্রেরি) হ্রাস করা হয়েছে, পরিবর্তে আপনার নিজের প্রতিশ্রুতি পাঠাগারটি প্লাগ করুন: http://mongoosejs.com/docs/promises.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.