Mongodb соответствует пустой объект во вложенном документе - PullRequest
10 голосов
/ 29 сентября 2011

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

Учитывая

{
   _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 Ответ

12 голосов
/ 05 августа 2012

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

db.mycoll.update(
    {'foo.fred':{ }},
    { $unset: {'foo.fred':1} },
    false,  // upsert: no
    true    // multi: find all matches
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...