在mongodb中查找数组中最接近的值

时间:2018-06-11 14:09:32

标签: arrays mongodb sorting mongodb-query aggregation-framework

我有一些学生,每个学生都在一个月的不同日子分配家务。

例如:

{ name: 'Josh', choredays: [2, 5, 16, 20, 28]},
{ name: 'Will', choredays: [5, 15, 18, 21, 22]}

鉴于一个数字,我希望第二天得到每个学生必须做家务的输出。

例如,给定14,我想得到

Josh 16
Will 15

我如何在Mongo Aggregation中表达这一点?

1 个答案:

答案 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