我將資料存盤在結構如下的 Mongo 集合中:
{
"numberAtPending" : 3,
"numberAtInProgress" : 5,
"numberAtCancelled" : 1,
"numberAtShipped" : 50,
"timeOfRequest" : ISODate("2022-01-10T12:52:15.813Z"),
"requestingSupplier" : "SUPPLIER_1",
},
{
"numberAtPending" : 5,
"numberAtInProgress" : 3,
"numberAtCancelled" : 4,
"numberAtShipped" : 35,
"timeOfRequest" : ISODate("2022-01-15T09:11:02.992Z"),
"requestingSupplier" : "SUPPLIER_1",
},
{
"numberAtPending" : 12,
"numberAtInProgress" : 3,
"numberAtCancelled" : 1,
"numberAtShipped" : 21,
"timeOfRequest" : ISODate("2022-01-10T14:21:55.221Z"),
"requestingSupplier" : "SUPPLIER_2",
}
我希望構建一個查詢,讓我通過 requestingSupplier 總結每個條目和組中的每個計數。
例如,我想回答這個問題,對于 22 年 1 月,每個物體的總和是多少,并得到類似于以下內容的回應:-
"TotalNumberAtPending": 300
"TotalNumberAtInProgress" : 150,
"TotalNumberAtCancelled" : 70,
"TotalNumberAtShipped" : 400
"Supplier" : "SUPPLIER_1",
"TotalNumberAtPending": 230
"TotalNumberAtInProgress" : 110,
"TotalNumberAtCancelled" : 40,
"TotalNumberAtShipped" : 300
"Supplier" : "SUPPLIER_2",
非常感謝任何幫助!謝謝并恭祝安康
uj5u.com熱心網友回復:
你可以試試這個查詢(我也假設你顯示的輸出是一個例子而不是真正的值,因為我不知道你從哪里可以得到 300、150、400...)
所以,試試這個:
您有兩個選項可以匹配兩個日期范圍內的值。如果要輸入月份和年份的名稱,可以嘗試以下操作:
- 使用
$expr和$eq和。$year_$month然后您可以使用所需月份或年份的數字作為輸入。
{
"$match": {
"$expr": {
"$and": [
{
"$eq": [
{
"$month": "$timeOfRequest"
},
1
]
},
{
"$eq": [
{
"$year": "$timeOfRequest"
},
2022
]
}
]
}
}
}
或者您可以按日期范圍進行匹配。如果您想獲取 01-2022 的所有檔案,您可以使用此$match階段,范圍從 1 月 1 日(等于)到 2 月 1 日(不等于,即 1 月的最后一秒)。
{
"$match": {
"timeOfRequest": {
"$gte": ISODate("2022-01-01T00:00:00Z"),
"$lt": ISODate("2022-02-01T00:00:00Z")
}
}
}
因此,完成過濾器后,您只需要$group像這樣使用來生成所需的欄位值。
{
"$group": {
"_id": "$requestingSupplier",
"TotalNumberAtPending": {
"$sum": "$numberAtPending"
},
"TotalNumberAtInProgress": {
"$sum": "$numberAtInProgress"
},
"TotalNumberAtCancelled": {
"$sum": "$numberAtCancelled"
},
"TotalNumberAtShipped": {
"$sum": "$numberAtShipped"
},
"Supplier": {
"$first": "$requestingSupplier"
}
}
}
此處和此處的示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418496.html
標籤:
