ฉันใช้ MongoDB กับ Node.JS. ฉันมีคอลเล็กชันที่มีวันที่และแถวอื่น ๆ วันที่เป็นDate
วัตถุJavaScript
ฉันจะจัดเรียงคอลเลคชันนี้ตามวันที่ได้อย่างไร?
date
คอลัมน์: stackoverflow.com/questions/5125521/…
ฉันใช้ MongoDB กับ Node.JS. ฉันมีคอลเล็กชันที่มีวันที่และแถวอื่น ๆ วันที่เป็นDate
วัตถุJavaScript
ฉันจะจัดเรียงคอลเลคชันนี้ตามวันที่ได้อย่างไร?
date
คอลัมน์: stackoverflow.com/questions/5125521/…
คำตอบ:
เพียงแค่ปรับเปลี่ยนคำตอบของ @JohnnyHK เล็กน้อย
collection.find().sort({datefield: -1}, function(err, cursor){...});
ในหลายกรณีการใช้งานเราต้องการให้มีการส่งคืนบันทึกล่าสุด (เช่นการอัปเดต / ส่วนแทรกล่าสุด)
Date
วัตถุที่ไม่มีฟังก์ชันไม่ได้ผลสำหรับฉันใน 2.6.3
collection.find().sort(...).exec(function(err, cursor) {})
การจัดเรียงตามวันที่ไม่จำเป็นต้องมีอะไรพิเศษ เพียงจัดเรียงตามช่องวันที่ที่ต้องการของคอลเลกชัน
อัปเดตสำหรับไดรเวอร์เนทีฟ 1.4.28 node.js คุณสามารถเรียงลำดับจากน้อยไปหามาก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
db.getCollection('').find({}).sort({_id:-1})
การดำเนินการนี้จะจัดเรียงคอลเล็กชันของคุณจากมากไปหาน้อยตามวันที่แทรก
คำตอบของ Sushant Gupta ค่อนข้างล้าสมัยและใช้ไม่ได้อีกต่อไป
ตัวอย่างต่อไปนี้ควรเป็นแบบนี้ในตอนนี้:
collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});
toArray
ส่วน
สิ่งนี้ใช้ได้ผลสำหรับฉัน:
collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });
การใช้ Node.js, Express.js และ Monk
collection.find().sort('date':1).exec(function(err, doc) {});
สิ่งนี้ได้ผลสำหรับฉัน
พังพอนมันง่ายเหมือน:
collection.find().sort('-date').exec(function(err, collectionItems) {
// here's your code
})
สแควร์เพิ่มเติม[]วงเล็บเป็นสิ่งจำเป็นสำหรับการเรียงลำดับพารามิเตอร์ในการทำงาน
collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});
หากรูปแบบวันที่ของคุณเป็นเช่นนี้: 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) {...}
แค่นั้นแหละ :)
ด้วยพังพอนฉันไม่สามารถใช้ 'toArray' และได้รับข้อผิดพลาด: TypeError: Collection.find(...).sort(...).toArray is not a function.
ฟังก์ชัน toArray มีอยู่ในคลาส Cursor จาก Native MongoDB NodeJS driver ( การอ้างอิง )
นอกจากนี้ sort ยอมรับพารามิเตอร์เพียงตัวเดียวดังนั้นคุณจึงไม่สามารถส่งผ่านฟังก์ชันของคุณเข้าไปข้างในได้
สิ่งนี้ใช้ได้ผลสำหรับฉัน (ตามคำตอบของEmil ):
collection.find().sort('-date').exec(function(error, result) {
// Your code
})