Найти ближайшее значение в массиве в mongodb - PullRequest
0 голосов
/ 11 июня 2018

У меня есть несколько учеников, каждому из которых назначены обязанности в разные дни месяца.

Например:

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

Учитывая число, я хочу получить в качестве выводана следующий день каждый ученик должен выполнять работу по дому.

Например, учитывая 14, я хочу получить

Josh 16
Will 15

Как я могу выразить это в агрегации Монго?

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете попробовать агрегацию ниже

Вам необходимо использовать $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"
  }
]

Вы можете проверить это здесь

...