Как я могу вернуть только одно поле в массиве Монго объектов, не удаляя остальную часть объекта - PullRequest
1 голос
/ 14 мая 2019

Я запрашиваю коллекцию, и в этой коллекции у меня есть массив объектов.В этом массиве я хочу использовать проекцию, чтобы возвращать только одно поле в каждом объекте.Однако я не хочу удалять все данные за пределами этого объекта.

Допустим, один документ в коллекции выглядит следующим образом

{
  "a": "some val",
  "b": "some other val",
  "c": [
    {
      "d": "some array val",
      "e": "some other array val"
    }
  ]
}

И скажем, я хочу удалить все поля вмассив, кроме 'd', заканчивается

{
  "a": "some val",
  "b": "some other val",
  "c": [
    {
      "d": "some array val",
    }
  ]
}

Я попытался:

db.collection.find({}, { "c.d": 1 })

, но это также удалило "a" и "b" и только что вернуло:

{
  "c": [
    {
      "d": "some array val",
    }
  ]
}

Кроме того, я не могу сделать:

db.collection.find({}, { "c.e": 0 })

, потому что могут быть и другие поля, кроме 'e', ​​и они также должны быть скрыты.

1 Ответ

1 голос
/ 14 мая 2019

Вы можете запустить $ addFields , чтобы перезаписать существующее поле, и $ map , чтобы преобразовать массив c и принять только значения d, попробуйте:

db.collection.aggregate([
    {
        $addFields: {
            c: {
                $map: {
                    input: "$c",
                    in: { d: "$$this.d" }
                }
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...