在 MongoDB 中提取兩個日期之間且具有特定值的資料。分組並從中獲取總值和計數?


要匹配,在 MongoDB 中使用 $match,要獲取兩個日期之間的資料,請使用 $gte 以及 $lte。讓我們建立一個包含文件的集合 −

> db.demo560.insertOne({"value1":40,"value2":40,shippingDate:new ISODate("2020-02-26")});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e867")
}
> db.demo560.insertOne({"value1":20,"value2":60,shippingDate:new ISODate("2020-02-26")});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e868")
}
> db.demo560.insertOne({"value1":40,"value2":70,shippingDate:new ISODate("2020-03-31")});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e869")
}
> db.demo560.insertOne({"value1":40,"value2":130,shippingDate:new ISODate("2020-03-31")});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8f3d5254b4472ed3e8e86a")
}

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

> db.demo560.find();

這將產生以下輸出 −

{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e867"), "value1" : 40, "value2" : 40, "shippingDate" : ISODate("2020-02-26T00:00:00Z") }
{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e868"), "value1" : 20, "value2" : 60, "shippingDate" : ISODate("2020-02-26T00:00:00Z") }
{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e869"), "value1" : 40, "value2" : 70, "shippingDate" : ISODate("2020-03-31T00:00:00Z") }
{ "_id" : ObjectId("5e8f3d5254b4472ed3e8e86a"), "value1" : 40, "value2" : 130, "shippingDate" : ISODate("2020-03-31T00:00:00Z") }

以下是查詢以獲取兩個日期之間並具有特定值的資料。這裡,value1 40 是我們的特定值 −

> db.demo560.aggregate([
... {
...    $match: {
...       "value1": 40,
...       "shippingDate": {
...          "$gte": ISODate("2020-02-26"),
...          "$lte": ISODate("2020-03-31")
...       }
...    }
... },
... {
...    $group: {
...       "_id": "$shippingDate",
...       total: {
...          $sum: '$value2'
...       },
...       count: {
...          $sum: 1
...       }
...    }
... }
... ])

這將產生以下輸出 −

{ "_id" : ISODate("2020-03-31T00:00:00Z"), "total" : 200, "count" : 2 }
{ "_id" : ISODate("2020-02-26T00:00:00Z"), "total" : 40, "count" : 1 }

更新於: 14-5-2020

601 次瀏覽

開啟您的事業

完成課程即可獲得證書

開始
廣告
© . All rights reserved.