我有一些学生,每个学生都在一个月的不同日子分配家务。
例如:
{ name: 'Josh', choredays: [2, 5, 16, 20, 28]},
{ name: 'Will', choredays: [5, 15, 18, 21, 22]}
鉴于一个数字,我希望第二天得到每个学生必须做家务的输出。
例如,给定14
,我想得到
Josh 16
Will 15
我如何在Mongo Aggregation中表达这一点?
答案 0 :(得分:3)
您可以尝试以下聚合
您需要使用$filter
聚合运算符,以消除较少的输入值。然后使用$slice
消除更大的值。
db.collection.aggregate([
{ "$addFields": {
"items": {
"$filter": {
"input": "$choredays",
"as": "chore",
"cond": { "$gte": [ "$$chore", 14 ] }
}
}
}},
{ "$addFields": { "items": { "$slice": [ "$items", 0, 1 ] }}},
{ "$unwind": "$items" },
{ "$project": { "items": 1, "name": 1 }}
])
将提供以下输出
[
{
"items": 16,
"name": "Josh"
},
{
"items": 15,
"name": "Will"
}
]
您可以查看here