我有一个猫鼬模型Model
,
这里有3个字段。
data
,main_id
和sub_id
所以如果我做Model.find()
:
我得到类似下面的内容
[
{data: 5, main_id: A, sub_id: X, created: 5/4/2020},
{data: 6, main_id: A, sub_id: Y, created: 5/4/2020},
{data: 7, main_id: B: sub_id: M, created: 4/4/2020},
{data:11, main_id: A, sub_id: X, created: 3/4/2020},
{data:12, main_id: A, sub_id: Y, created: 4/4/2020},
{data:13, main_id: A, sub_id: X, created: 4/4/2020}
]
我想获取所有data
唯一的main_id: A
字段,该字段按created
和limit
到1
排序,每个sub_id
在main_id
因此,在这种情况下,我想返回一个[5, 6]
数组,因为这是data
的最新main_id: A
条目,以及sub_id: X
和{{ 1}}分别位于Y
下。
答案 0 :(得分:1)
您可以使用$match,$sort和$group聚合阶段来实现这一目标。
Model.aggregate([
{
$match: {
"main_id": "A"
}
},
{
$sort: {
"created": -1
}
},
{
$group: {
"_id": {sub_id: "$sub_id"},
data: {
"$first": "$data"
}
}
}
])
结果:
[
{
"_id": "Y",
"data": 6
},
{
"_id": "X",
"data": 5
}
]
请注意,.aggregate()方法始终返回对象,因此在快速应用程序中,您可以执行简单的映射即可将其转换为[5, 6]
。