Mongodb - 按受限制的数组元素进行聚合排序



>我有以下文档,在这里我想在有限的范围内按字段"ranks.rank"对它们进行排序。

如何进行这种排序?'ranks.date': { '$gte': 20200516 }

我试过类似的东西

{ $match: selector },
{
$project: {
views: 1,
'ranks': {
$cond: {
if: { $gte: ["$ranks.date", 20200516] },
then: "$ranks",
else: "$$REMOVE"
}
},
}
},
{ $addFields: { totalRank: { $sum: '$ranks.rank' } } },
{ $sort: { 'totalRank': 1 } }

文件

{ 
"_id" : "Qvpbjpjqexko4XFGH", 
"views" : NumberInt(15), 
"ranks" : [
{
"date" : NumberInt(20200415), 
"rank" : NumberInt(1)
}, 
{
"date" : NumberInt(20200418), 
"rank" : NumberInt(13)
}, 
{
"date" : NumberInt(20200503), 
"rank" : NumberInt(1)
}
]{ 
"_id" : "bLQKR39qmJcwuzm8r", 
"views" : NumberInt(16), 
"ranks" : [
{
"date" : NumberInt(20200415), 
"rank" : NumberInt(1)
}, 
{
"date" : NumberInt(20200418), 
"rank" : NumberInt(12)
}, 
{
"date" : NumberInt(20200501), 
"rank" : NumberInt(2)
}, 
{
"date" : NumberInt(20200521), 
"rank" : NumberInt(1)
}
]

看起来你的帖子主要是代码;请添加更多细节。

我想我想明白了

{ $match: selector },
{
$project: {
views: 1,
ranks: {
$filter: {
input: "$ranks",
as: "rank",
cond: { $gte: ["$$rank.date", monAgo] }
}
},
},
},
{ $addFields: { totalRank: { $sum: '$ranks.rank' } } },
{ $sort: { 'totalRank': -1 } }

最新更新