মঙ্গোডিবিতে তারিখ অনুসারে কীভাবে একটি সংগ্রহ বাছাই করবেন?


125

আমি নোড.জেএস এর সাথে মঙ্গোডিবি ব্যবহার করছি আমার কাছে একটি সংগ্রহ রয়েছে যাতে একটি তারিখ এবং অন্যান্য সারি থাকে। তারিখটি একটি জাভাস্ক্রিপ্ট Dateঅবজেক্ট।

আমি কীভাবে তারিখ অনুসারে এই সংগ্রহটি বাছাই করতে পারি?


1
সরল, সংগ্রহ.ফাইন্ড ()। সাজান ({ডেটফিল্ড: 1}, ফাংশন (ত্রুটি, কার্সার) {...}); বা আপনি সংগ্রহ.ফাইন্ড () .ও বাছাই করতে পারেন ({ডেটফিল্ড: -1}, ফাংশন (ত্রুটি, কার্সার) {...});
অতুল জৈন

নোট আপনি একটি প্রয়োজন হবে না হতে পারে dateকলাম: stackoverflow.com/questions/5125521/...
phil294

উত্তর:


186

@ জননিএইচকে উত্তরের জন্য সামান্য পরিবর্তন mod

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

অনেকগুলি ব্যবহারের ক্ষেত্রে আমরা সর্বশেষ রেকর্ডগুলি ফিরিয়ে দিতে চাই (সর্বশেষ আপডেট / সন্নিবেশগুলির জন্য)।


1
আপনি এই ফাংশনটি কী রাখবেন? Dateকোনও ফাংশন ছাড়াই কেবল অবজেক্টগুলিকে সাজানোর চেষ্টা করা আমার জন্য ২.6.৩ এ কাজ করছে না।
স্যাম ব্রাইটম্যান

@ স্যামবাইটারম্যান সেই ফাংশনটি কেবল একটি কলব্যাক। আপনি ক্যোয়ারী ফলাফলের সাথে যা কিছু করতে চান না কেন, আপনি সেই যুক্তিটি আপনার কলব্যাকের ভিতরে রেখেছিলেন। কলব্যাকগুলি কী এবং ইভেন্ট ইভেন্ট ভিত্তিক প্রোগ্রামিং শিখতে কীভাবে তারা কাজ করে সে সম্পর্কে আপনি আরও পড়তে পারেন।
সুশান্ত গুপ্ত

অবশ্যই, আমি জানি কলব্যাক কী। আমি কেবল প্রশ্নে বাছাইয়ের প্রয়োজনীয়তাটি দেখেছি এবং সমস্ত উত্তর কলব্যাক দেয়। একই সময়ে, বাছাই করা আমার পক্ষে কাজ করছিল না, তাই আমি ভেবেছিলাম ফাংশনে আপনাকে অতিরিক্ত কাজ করতে হবে।
স্যাম ব্রাইটম্যান

1
পছন্দ করুন সুবিধার্থে আপনি স্পষ্ট এবং চেইন হতে পারেন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অংশ অভাব ছিল ।
ক্রিকারা

এটি আসলে একটি ভুল উত্তর, এটি
ডেভিড এ

12

এটি আমার পক্ষে কাজ করেছে:

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

নোড.জেএস, এক্সপ্রেস.জেএস এবং সন্ন্যাসী ব্যবহার করে



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 ----> আপনি কিছু সমস্যা পেতে পারেন

আপনার এই জাতীয় আইএসডিটি ব্যবহার করতে হবে:

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

-----> ফলাফল ------> আইএসওডেট ("2012-07-14T08: 14: 00.201Z")

এখন ঠিক এইভাবে কোয়েরি ব্যবহার করুন:

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

এটাই :)


2

মঙ্গুজের সাহায্যে আমি 'টু অ্যারে' ব্যবহার করতে পারিনি, এবং ত্রুটিটি TypeError: Collection.find(...).sort(...).toArray is not a function. পেয়েছিলাম : টোআরয়ে ফাংশনটি নেটিভ মঙ্গোডিবি নোডজেএস ড্রাইভার ( রেফারেন্স ) থেকে কার্সার ক্লাসে বিদ্যমান ।

এছাড়াও বাছাই করা কেবলমাত্র একটি প্যারামিটার গ্রহণ করে, সুতরাং আপনি নিজের ফাংশনটি এর ভিতরে পাস করতে পারবেন না।

এটি আমার পক্ষে কাজ করেছে ( এমিলের উত্তর হিসাবে ):

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.