代码之家  ›  专栏  ›  技术社区  ›  CodyBugstein

在MongoDB的数组中查找最近的值

  •  2
  • CodyBugstein  · 技术社区  · 7 年前

    我有很多学生,每个人都在一个月的不同日子被分配做家务。

    例如:

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

    给定一个数字,我想在第二天得到每个学生必须做家务的输出。

    例如,给定 14 ,我想得到

    Josh 16
    Will 15
    

    如何在Mongo聚合中表达这一点?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Ashh    6 年前

    你可以试试下面的聚合

    你需要使用 $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