#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.