Как удалить поле полностью из документа MongoDB?
{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
предположим, что это документ. Как удалить "words
" полностью из всех документов в этой коллекции? Я хочу, чтобы все документы были без "words
":
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
8 ответов
попробуйте это: если ваша коллекция была "примером"
db.example.update({}, {$unset: {words:1}}, false, true);
обратитесь к этому:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
обновление:
приведенная выше ссылка больше не охватывает '$unset'ing. Комментарий Ника Котрелла ниже-это путь. Обязательно добавьте {multi: true}
Если вы хотите удалить это поле из всех документов коллекции; в противном случае оно будет удалено только из первого документ он находит, что соответствует. См. эту обновленную документацию:
https://docs.mongodb.com/manual/reference/operator/update/unset/
пример:
db.example.update({}, {$unset: {words:1}} , {multi: true});
в начале я не понял, почему вопрос имеет щедрость (я думал, что вопрос имеет хороший ответ, и нечего добавить), но потом я заметил, что ответ, который был принят и озвучен 15 раз, был на самом деле неправильным!
Да, вы должны использовать $unset
оператор, но этот unset собирается удалить ключ слов, который не существует для документа для коллекции. Так что, по сути, он ничего не сделает.
поэтому вам нужно сказать Монго посмотрите в тегах документа, а затем в словах, используя точку. Таким образом, правильный запрос.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
просто для завершения, я буду ссылаться на другой способ сделать это, что намного хуже, но таким образом вы можете изменить поле с любым пользовательским кодом (даже на основе другого поля из этого документа).
удалить или удалить поле в MongoDB
-
для одной записи
db.getCollection('userData').update({}, {$unset: {pi: 1}})
-
Для Multi Записи
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
db.example.updateMany({},{"$unset":{"tags.words":1}})
мы также можем использовать это, чтобы обновить несколько документов.
по умолчанию, метод update() обновляет один документ. Задайте параметр Multi для обновления всех документов, соответствующих критериям запроса.
изменено в версии 3.6. Синтаксис:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
пример :
db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})
в вашем примере :
db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true})
Проверка наличия" слов", а затем удаление из документа
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true указывает на обновление нескольких документов, если они совпадают.
для ссылки на пакет и удаления различных " ключей", попробуйте это
db['name1.name2.name3.Properties'].remove([
{
"key" : "name_key1"
},
{
"key" : "name_key2"
},
{
"key" : "name_key3"
}
)]