Фильтр MongoDB, порядок, агрегат на поле массива? - PullRequest
0 голосов
/ 26 января 2020

это мой формат документа

[
    {
        "name" : "test1",
        "other_name" : "TEST1_1",
        "values" : ["11", "12", "13", "14"]
    },
    {
        "name" : "test2",
        "other_name" : "TEST2_1",
        "values" : ["21", "22", "23", "24"]
    },
    {
        "name" : "test3",
        "other_name" : "TEST3_1",
        "values" : ["11", "32", "13", "14"]
    }
]

Я хочу желаемый вывод как:

["11", "12", "13", "14", "21", "22", "23", "24", "32"]

Я должен быть в состоянии фильтровать (фильтровать по значениям только для массива), orderby (только по массиву значений) для них.

Можете ли вы помочь мне в этом?

Я пробовал это:

db.collection.distinct('values', { "values" : /32/ }).sort(); но это возвращает все значения, такие как "11", "32", "13", "14" Я хочу только указать c значения, вы можете помочь с этим?

1 Ответ

0 голосов
/ 27 января 2020

Вам нужно использовать MongoDB операции агрегирования , чтобы получить желаемый результат .

Сглаживание values с помощью оператора $unwind. Мы сортируем значения. Затем мы $group все документы в один документ и сохраняем все значения (повторяется). С $reduce мы генерируем новый массив с уникальными значениями.

Примечание: Агрегация возвращает массив объектов

db.collection.aggregate([
  {
    $unwind: "$values"
  },
  {
    $sort: {
      values: 1
    }
  },
  {
    $group: {
      _id: null,
      values: {
        $push: "$values"
      }
    }
  },
  {
    $project: {
      _id: 0,
      values: {
        $reduce: {
          input: "$values",
          initialValue: [],
          in: {
            $concatArrays: [
              "$$value",
              {
                $cond: [
                  {
                    $in: [
                      "$$this",
                      "$$value"
                    ]
                  },
                  [],
                  [
                    "$$this"
                  ]
                ]
              }
            ]
          }
        }
      }
    }
  }
])

MongoPlayground

Непонятно, что вы имеете в виду под только указанными c значениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...