{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
Предположим, это документ. Как words
полностью удалить " " из всех документов в этой коллекции? Я хочу, чтобы все документы были без " words
":
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
mongodb
mongodb-query
database
TIMEX
источник
источник
tags.words
должно быть$unset
, нетwords
? Смотрите также ответ Сальвадора Дали.updateMany
вместо{multi:true}
, то естьdb.example.updateMany({},{"$unset":{words:""}})
Вначале я не понимал, почему у вопроса есть щедрость (я думал, что на вопрос есть хороший ответ, и добавить нечего), но потом я заметил, что ответ, который был принят и проголосован 15 раз, был на самом деле неправильным!
Да, вы должны использовать
$unset
оператор , но этот сброс приведет к удалению ключа слова, который не существует для документа для коллекции. Так что в принципе это ничего не даст.Таким образом, вы должны указать Mongo искать теги документа, а затем слова, используя точечную запись . Итак, правильный запрос.
Просто для завершения я буду ссылаться на другой способ сделать это , который намного хуже, но таким образом вы можете изменить поле с любым пользовательским кодом (даже на основе другого поля из этого документа).
источник
Мы также можем использовать это для обновления нескольких документов.
источник
false, true
последние два аргументаupdate()
Удалить или удалить поле в MongoDB
Для одиночной записи
Для мульти записи
источник
Я пытался сделать что-то похожее на это, но вместо этого удалить столбец из встроенного документа. Мне понадобилось некоторое время, чтобы найти решение, и это был первый пост, с которым я столкнулся, поэтому я подумал, что опубликую это здесь для всех, кто пытается сделать то же самое.
Допустим, вместо этого ваши данные выглядят так:
Чтобы удалить столбец
words
из внедренного документа, сделайте это:или используя
updateMany
$unset
будет редактировать его только в том случае, если значение существует, но не будет выполнять безопасную навигацию (он не будет проверять,tags
существует ли сначала), поэтому существует необходимость во встроенном документе.Это использует все позиционный оператор (
$[]
), который был представлен в версии 3.6источник
По умолчанию метод update () обновляет один документ. Установите параметр Multi Parameter для обновления всех документов, которые соответствуют критериям запроса.
Изменено в версии 3.6. Синтаксис:
Пример :
В вашем примере:
источник
Начиная
Mongo 4.2
, также возможно использовать немного другой синтаксис:обновление также может принимать конвейер агрегации (обратите внимание на квадратные скобки, обозначающие использование конвейера агрегации).
Это означает,
$unset
что используемый оператор является оператором агрегирования (в отличие от оператора «запроса» ), синтаксис которого принимает массив полей.источник
Решение для PyMongo (Питон Монго):
источник
И для mongomapper,
Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )
источник
Поскольку я продолжал находить эту страницу, когда искал способ удалить поле с помощью MongoEngine, я думаю, что было бы полезно опубликовать здесь также MongoEngine:
источник
{имя: 'книга', теги: {слова: ['abc', '123'], широта: 33, длина: 22}}
Ans:
db.tablename.remove ({ 'tags.words': [ 'ABC', '123']})
источник
Проверка наличия «слов» и удаление из документа
Значение true означает обновление нескольких документов, если они совпадают.
источник
Вы также можете сделать это в агрегации с помощью проекта на 3.4
{$ project: {"tags.words": 0}}
источник
Чтобы сослаться на пакет и удалить различные «ключи», попробуйте это
источник