เมื่อฟิลด์มีค่า null และต้องการจัดเรียง ให้ใช้ sort() (ตั้งแต่ MongoDB v3.2 $orderby ถูก deprecated)
> db.demo530.insertOne({"Name": "Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b2990ef4dcbee04fbbbec") }
> db.demo530.insertOne({"Name": null});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b2991ef4dcbee04fbbbed") }
> db.demo530.insertOne({"Name": "David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b2992ef4dcbee04fbbbee") }
> db.demo530.insertOne({"Name": "Adam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b2995ef4dcbee04fbbbef") }
> db.demo530.insertOne({"Name": null});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b2999ef4dcbee04fbbbf0") }
> db.demo530.insertOne({"Name": "Carol"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b299eef4dcbee04fbbbf1") }
แสดงข้อมูล (ไม่ได้เรียง):
> db.demo530.find();
{ "_id" : ObjectId("5e8b2990ef4dcbee04fbbbec"), "Name" : "Chris" }
{ "_id" : ObjectId("5e8b2991ef4dcbee04fbbbed"), "Name" : null }
{ "_id" : ObjectId("5e8b2992ef4dcbee04fbbbee"), "Name" : "David" }
{ "_id" : ObjectId("5e8b2995ef4dcbee04fbbbef"), "Name" : "Adam" }
{ "_id" : ObjectId("5e8b2999ef4dcbee04fbbbf0"), "Name" : null }
{ "_id" : ObjectId("5e8b299eef4dcbee04fbbbf1"), "Name" : "Carol" }
คิวรี Aggregation เรียงตาม Name (null จะอยู่บนสุด)
> db.demo530.aggregate([
... {$match: {"Name": {$exists: true}}},
... {$sort: {"Name": 1}}
... ]);
ผลลัพธ์ - null อยู่ก่อน ตามด้วย A-Z:
ลำดับการจัดเรียงของ MongoDB (BSON Order)
- Null / Missing values
- Numbers (int, long, double)
- Strings
- Objects / Arrays
- Binary data
- ObjectId
- Boolean
- Date
- Timestamp
- Regular Expression
เคล็ดลับ: ใส่ null ไปท้ายสุด
ใช้
$sortร่วมกับ$projectสร้างฟิลด์ sort key:{$project: {sortKey: {$cond: [{$eq: ["$Name", null]}, 1, 0]}, Name: 1}}, {$sort: {sortKey: 1, Name: 1}}จะได้ลำดับ: Adam, Carol, Chris, David, null, null