MongoDB агрегатный массив документов - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть коллекция MongoDB, содержащая такие элементы:

{
    "name": "test",
    "instances": [
        {
            "year": 2015
        },
        {
            "year": 2016
        },
    ]
}

Как получить минимальное и максимальное значение для year в документе с именем test?Например, я хочу собрать все документы внутри этого массива, но не могу найти синтаксис для этого.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Вы можете использовать ниже агрегации

db.collection.aggregate([
  { "$project": {
    "maxYear": {
      "$arrayElemAt": [
        "$instances",
        {
          "$indexOfArray": [
            "$instances.year",
            { "$max": "$instances.year" }
          ]
        }
      ]
    },
    "minYear": {
      "$arrayElemAt": [
        "$instances",
        {
          "$indexOfArray": [
            "$instances.year",
            { "$min": "$instances.year" }
          ]
        }
      ]
    }
  }}
])
0 голосов
/ 02 февраля 2019

Оба $ min и $ max принимают массив в качестве параметра, а в вашем случае case instances.year возвращает массив, чтобы ваш запрос мог выглядеть следующим образом:

db.col.aggregate([
    {
        $match: { name: "test" }
    },
    {
        $project: {
            minYear: { $min: "$instances.year" },
            maxYear: { $max: "$instances.year" }
        }
    }
])
...