{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
Предположим, что это документ. Как полностью удалить "words
" из всех документов этой коллекции? Я хочу, чтобы все документы были без "words
":
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
Попробуйте это: если ваша коллекция была "примером"
db.example.update({}, {$unset: {words:1}}, false, true);
Порекомендуйте это:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
ОБНОВЛЕНИЕ:
Приведенная выше ссылка больше не распространяется на $ unset. Не забудьте добавить {multi: true}
если вы хотите удалить это поле из всех документов в коллекции; в противном случае он удалит его только из первого найденного документа. Смотрите это для обновленной документации:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Пример:
db.example.update({}, {$unset: {words:1}} , {multi: true});
Вначале я не понимал, почему у вопроса есть щедрость (я думал, что на вопрос есть хороший ответ, и добавить нечего), но потом я заметил, что ответ, который был принят и проголосован 15 раз, был на самом деле неправильным!
Да, вы должны использовать оператор $unset
, но этот unset удалит ключ слов, который не существует для документа для коллекции. Так что в принципе это ничего не даст.
Таким образом, вы должны указать Mongo искать в тегах документа, а затем в словах, используя точечные обозначения. Итак, правильный запрос.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Просто для завершения, я буду ссылаться на другой способ сделать это, который намного хуже, но таким образом вы можете изменить поле с любым пользовательским кодом (даже на основе другого поля из этого документа).
Чтобы удалить или удалить поле в MongoDB
Для одиночной записи
db.getCollection('userData').update({}, {$unset: {pi: 1}})
Для многоканальной записи
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
db.example.updateMany({},{"$unset":{"tags.words":1}})
Мы также можем использовать это для обновления нескольких документов.
И для mongomapper,
Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )
{имя: 'книга', теги: {слова: ['abc', '123'], широта: 33, длина: 22}}
Ans:
db.tablename.remove({ 'tags.words': [ 'ABC', '123']})
По умолчанию метод update() обновляет один документ. Установите параметр Multi Parameter для обновления всех документов, которые соответствуют критериям запроса.
Изменено в версии 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 указывает на обновление нескольких документов, если они совпадают.
вы также можете сделать это в агрегации, используя проект в 3.4
{$ project: { "tags.words": 0}}
Чтобы ссылаться на пакет и удалять различные "ключи", попробуйте это
db['name1.name2.name3.Properties'].remove([
{
"key" : "name_key1"
},
{
"key" : "name_key2"
},
{
"key" : "name_key3"
}
)]