如果 MongoDB 中存在可能為 null 的值,如何使用 ORDERBY?


如果存在 NULL 值,則使用 sort() 實現 ORDERBY。

注意 − 由於從 MongoDB v3.2 開始,$orderby 運算子在 mongo shell 中已棄用。請使用 cursor.sort() 代替。

讓我們建立一個包含文件的集合 −

> 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")
}

在集合中顯示所有文件,方法是使用 find() 方法 −

> 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" }

以下查詢用於使用 sort() 在 MongoDB 中實現 ORDERBY,即使存在 null 值 −

> db.demo530.aggregate([
...    {$match: {"Name": {$exists: true}}}
...    ,
...    {$sort: { "Name": 1}}
... ]);

這將生成以下輸出 −

{ "_id" : ObjectId("5e8b2991ef4dcbee04fbbbed"), "Name" : null }
{ "_id" : ObjectId("5e8b2999ef4dcbee04fbbbf0"), "Name" : null }
{ "_id" : ObjectId("5e8b2995ef4dcbee04fbbbef"), "Name" : "Adam" }
{ "_id" : ObjectId("5e8b299eef4dcbee04fbbbf1"), "Name" : "Carol" }
{ "_id" : ObjectId("5e8b2990ef4dcbee04fbbbec"), "Name" : "Chris" }
{ "_id" : ObjectId("5e8b2992ef4dcbee04fbbbee"), "Name" : "David" }

更新於:13-May-2020

624 次瀏覽

開啟你的職業生涯

完成課程並獲得認證

開始
廣告
© . All rights reserved.