Доступ к случайному полю с использованием другого значения поля - PullRequest
3 голосов
/ 13 июля 2020

У меня есть такой документ:

{
    value: "field2",
    field1: [ ... ],
    field2: [ ... ],
    ...
}

Где value будет значением одного из полей в документе. и для одного документа можно использовать много разных полей.

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

Например, я хочу сделать:

{
  $unwind: "$value"
}

И получить результаты field2 развернутым. Как я могу это сделать?

1 Ответ

1 голос
/ 13 июля 2020

Это немного "взломано", но вы можете добиться этого, используя такие операторы, как $ objectToArray и $ filter , например:

db.collection.aggregate([
  {
    $addFields: {
      "values": {
        $arrayElemAt: [
          {
            $filter: {
              input: {
                $objectToArray: "$$ROOT"
              },
              as: "field",
              cond: {
                $eq: [
                  "$$field.k",
                  "$value"
                ]
              }
            }
          },
          0
        ]
      }
    }
  },
  {
    $unwind: "$values.v"
  },
  {
    $replaceRoot: {
      newRoot: "$values.v"
    }
  },
  
])

MongoPlayground

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