Mongodb сопоставляет пустой объект во вложенном документе

#mongodb

#mongodb

Вопрос:

Мне просто интересно, возможно ли это сделать в одном запросе?

Учитывая

 {
   _id: 1,
   foo: {
     fred: {},          // <- I want to remove empty keys like this
     barney: { bar: 1 } // <- But keep these keys
   }
}
  

Ожидаемый

 {
   _id: 1,
   foo: {
     barney: { bar: 1 }
   }
}
  

Я знаю, как это сделать в нескольких запросах, но я пытаюсь лучше понять MongoDB.


Примечание. fred становится пустым в команде обновления, например { $unset: { "fred.baz": 1 } } , когда baz вводится последний ключ fred .

Может быть, можно удалить его вместе с его содержимым? Но отправитель команды не знает, есть ли какие-либо другие ключи, кроме baz как на данный момент.

Ответ №1:

Вы можете искать пустые встроенные документы ( { } ) и $unset их .. вот пример в оболочке JS:

 db.mycoll.update(
    {'foo.fred':{ }},
    { $unset: {'foo.fred':1} },
    false,  // upsert: no
    true    // multi: find all matches
)
  

Комментарии:

1. Как бы вы написали, что значение не {} имеет поля в объекте?

2. С помощью запроса {‘foo.fred’:{ ‘$gt’: {} }} вы получите документы с непустым foo . атрибут fred.