Как удалить несоответствующие значения из поддокумента из коллекции MongoDB? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть следующий документ в моей коллекции mongoDB.

{"key":"CarName","value":{"default":"Unknown","MyCar":"TNK1234","YourCar":"TNW2342"}}

В этом документе я хочу только сохранить элемент "MyCar" в значение вложенный документ.

Я пытался

db.mycollection.update({{"key":"CarName"},{value.MyCar:0}},{$pull:{value.MyCar:0}});

Но весь документ удаляется. Не уверен в синтаксисе.

Мне бы хотелось, чтобы документ выглядел как

{'key': 'CarName', 'value': {'TNK1234': 'My Car'}}

После некоторых предложений по комментариям

я попытался

db.mycollection.update({"key":"CarName"},{$unset:{"value.default:"","value.YourCar":""}});

, который работает

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

1 Ответ

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

Если вы используете MongoDB 4.2, вы можете указать конвейер для обработки обновления. Один из способов выполнить sh, а именно:

  • , преобразовать объект в массив пары ключ-значение
  • , отфильтровать массив, оставив только нужный вам ключ
  • преобразовать массив обратно в объект
  • сохранить значение обратно в исходное поле
db.mycollection.update({"key":"CarName"},
                       [{$set: {
                          value: {
                            $arrayToObject: {
                              $filter: {
                                        input: {$objectToArray: "$value"},
                                        cond: {$eq: ["$$this.k","MyCar"]}
                              }
                            }
                          }
                       }}]
)

Пн go площадка не поддерживает обновление, но это демонстрирует, что что этап конвейера будет делать: Детская площадка

...