1
我試圖按月份和年份獲取一組mongo文檔。目前的查詢我的作品:按客戶ID標記客戶ID的唯一記錄,並跟蹤客戶ID的總記錄
var query = Order.aggregate(
{
$project:
{
cust_ID : '$request.headers.custID',
cost : '$request.body.expectedPrice',
year :
{
$year: '$date'
},
month:
{
$month: '$date'
}
}
},
{
$match:
{
year : year,
month: month
}
}
);
但我也需要聚合/按客戶ID推總訂單,所以我說這查詢的中期階段$project
和$match
之間。該查詢回來空,甚至以爲我知道有結果:
{
$group:
{
"_id": "$request.headers.custID",
"custID" : {
"$first" : "$request.headers.custID"
},
"orders":
{
"$push":
{
"order": "$request.body"
}
}
}
},
我想補充一點聚合push
至$項目,但項目$不支持。我該如何編寫這個查詢?
感謝這個!我正在失去「成本」領域。這是因爲我沒有繼續將成本字段從'$ project'輸入到'$ group'中?我發現使用「」,$和「$」等令人困惑。爲什麼'$ project'需要加引號,'$ match'不需要?爲什麼'訂單'在引號中,其餘的字段不是? ('cust_ID','cost'等)?在'$ group'中,爲什麼它是'「order」:「$ order」'?我覺得這很令人困惑 – Growler
我修改了我的答案,通過'$ first'運算符在'$ group'管道中包含'cost'字段。使用'$'字符不應該是令人生畏的,因爲這是mongo如何解釋管道中的文檔字段。除非您使用點符號封裝嵌入字段,否則引號是非常必要的字符串。最後,「orders」這個語句:{「$ push」:{「order」:「$ order」}}'會創建一個文檔數組,例如: '{...,「orders」:[{「order」:「ABC」},{「order」:「XYZ」}],..}'。 – chridam