我見過類似的問題,但對於像我這樣的新手來說,這很複雜。再加上沒有答案提供了語法分解。聚合使用項目和切片,mongodb
我的數據庫:
name :"Kim"
points: [
{ category:"Purchase",
points: -50},
{ category: "Wage",
points : 275},
{ category: "Purchase",
points: -40}
]
name :"Meghan"
points: [
{ category:"Contest",
points: 130},
{ category: "Purchase",
points : -25},
{ category: "Games",
points : 50}
]
]
所以在蒙戈外殼我試圖得到它找到每一個等於「購買」,但只返回給我的最後一個points.category。我試圖通過使用聚合,$ project和$ slice來實現這一點。我的問題是,我不明白這個語法足以知道$ slice是在$ project內還是在外面用逗號分隔。我明白當我自己使用$ project或者使用$ slice時的語法,但是我不知道如何將所有這些東西一起使用到一些神奇的東西。如果有人能幫我解決我的問題,並解釋如何將所有這些事情妥善地結合在一起,我會永遠感激不盡。我已經閱讀了文檔,但沒有告訴我如何一次使用所有內容。
我想搜索名字是Kim的學生點,找到她最後一次購買。我想要的結果是 [{points:-40}]
你缺少的部分是你需要['$ filter'(https://docs.mongodb.com/manual/reference/operator/aggregation/filter/)數組內容'「購買「**之前**你申請'$切片'或甚至['arrayElemAt'](https://docs.mongodb.com/manual/reference/operator/aggregation/arrayElemAt/)爲了得到* *最後**元素。所以'$ filter'只返回這些元素的數組。用'$ slice'和'-1'對該索引包裝該索引以返回該「已過濾」數組中的「最後一個」。 –
請參閱[僅檢索MongoDB集合中對象數組中的查詢元素](https://stackoverflow.com/q/3985214/2313887),以瞭解鏈接文檔以外的'$ filter'的示例用法。 –
好吧,我想出了這個:'db.students.aggregate([{$ project:{points:{$ filter:{input:「$ points」,as:「pts」,cond:{$ eq:[「$ $ pts.category「,」Purchase「]}}}}}])。pretty()'問題是它返回每個學生的購買。我如何讓它只返回金錢,我在哪裏放置切片只得到最後一次購買。 –