我见过类似的问题,但对于像我这样的新手来说,这很复杂。再加上没有答案提供了语法分解。聚合使用项目和切片,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()'问题是它返回每个学生的购买。我如何让它只返回金钱,我在哪里放置切片只得到最后一次购买。 –