MongoDB: Общее количество различных значений в поле массива - PullRequest
2 голосов
/ 05 апреля 2020

У меня есть простые документы, такие как

{
  ...,
  things: ["a", "b", "c"]
},
{
  ...,
  things: ["b", "d", "e"]
},
...

, и я хочу общее количество различных вещей, в данном случае: ["a","b","c","d","e"], результат должен быть 5.

Как чтобы сделать это с помощью агрегированного запроса?

Моя текущая попытка

[
  {
    "$group": {
      "_id": "things",
      "things": { "$push": "$things" }
    }
  },
  {
    "$addFields": {
      "allThings": {
        "$reduce": {
          "input": "$things",
          "initialValue": [],
          "in": {
            "$concatArrays": ["$$value", "$$this"]
          }
        }
      }
    }
  }
]

, которая возвращает все поля в одном массиве, но я не знаю, как подсчитать в нем различные значения.

Рад за любую помощь!

1 Ответ

1 голос
/ 05 апреля 2020

Это буквально первый запрос MongoDB, который я когда-либо писал, поэтому, пожалуйста, помогите мне улучшить это:

db.collection.aggregate([
    {
        $group: {
            _id: null,
            things: { $push: "$things"}
        }
    },
    {
        $project: {
            _id: 0,
            things: {
                $reduce: {
                    input: "$things",
                    initialValue: [],
                    in: {
                        $setUnion: [ "$$this", "$$value"]
                    }
                }
            }
        }
    },
    {
      $project: {
         item: 1,
         numberOfUniqueThings: {  $size: "$things" }
      }
   }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...