Как полностью удалить поле из документа MongoDB?



{ 
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}


предположим, что это документ. Как мне удалить "words полностью из всех документов в этой коллекции? Я хочу, чтобы все документы были без "words":



 { 
name: 'book',
tags: {
lat: 33,
long: 22
}
}
920   8  

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 указывает на обновление нескольких документов, если они совпадают.

вы также можете сделать это в агрегации с помощью проекта в 3,4

{$project: {"теги.слова": 0} }

для ссылки на пакет и удаления различных " ключей", попробуйте это

db['name1.name2.name3.Properties'].remove([
{
     "key" : "name_key1"
},
{
     "key" : "name_key2"
},
{
     "key" : "name_key3"
}
)]

Comments

    Ничего не найдено.