#arrays #mongodb #flask #mongodb-query #pymongo
Вопрос:
Всего хорошего. Я надеюсь, что вы сможете помочь с одной проблемой. Я использую приложение для создания колбы и использую pymongo, и мне нужно удалить единственное значение массива из нескольких массивов во многих документах в одной коллекции. У меня есть документы рецептов в коллекции «рецепты», и в каждом из них есть массив («категория»), длина которого может составлять от 1 до 3 значений. У меня есть функция, доступная в разделе «администратор» моего сайта, которая позволяет удалять категорию из коллекции «категории», и поэтому для этого я хочу удалить любые экземпляры значения этой категории в массиве «категория» в любом документе рецепта в коллекции рецептов.
Мне удалось сделать это в одном документе:
mongo.db.recipes.update(
{"_id": ObjectId("60df2eec9df14e58d0c698c8")},
{"$pull": {"category": category_id}}
)
но мне не удалось сделать это для коллекции в целом, я решил, что мне нужно использовать $all с оператором $pull для коллекции, используя запрос «update_many», и до сих пор пытался:
mongo.db.recipes.update_many({"category": {"$all": {"$pull": {"category": category_id}}}})
mongo.db.recipes.update_many({"$all": {"$pull": {"category": category_id}}})
mongo.db.recipes.update_many({"category": {"$pullAll": {"category": category_id}}})
Ни один из них не работает. Я продолжаю получать сообщение об ошибке:
TypeError: update_many() missing 1 required positional argument: 'update'
Любая помощь будет признательна.
Ответ №1:
1-й параметр-фильтр, который будет {}
, если вы хотите обновить весь документ
mongo.db.recipes.update_many(
{} // filter filter,
{} // update
)
mongo.db.recipes.update_many({ }, {"$pull": {"category": category_id}})
Комментарии:
1. Спасибо, что ответили Тушару, я попробовал это как:
mongo.db.recipes.update_many({"$filter": {input: "category"}}, {"$all": {"$pull": {"category": category_id}}})
и не повезло — какой был бы правильный синтаксис?2. у вас есть документы с ключом
input
?3. Ключом для массива является «категория», которая может иметь до трех значений. Я попробовал то, что вы предложили, и получил ошибку pymongo.errors. Ошибка записи: Неизвестный модификатор: $все. Ожидаемый допустимый модификатор обновления или обновление в стиле конвейера, указанное в виде массива, полная ошибка: {«индекс»: 0, «код»: 9, «errmsg»: «Неизвестный модификатор: $все. Ожидаемый допустимый модификатор обновления или обновление в стиле конвейера, указанное в виде массива’}
4. Поэтому я попробовал: 1) mongo.db.recipes.update_many({«ввод»: «категория»}, {«$pull»: {«категория»: идентификатор категории}})
5. просто попробовал это: mongo.db.recipes.update_many({ }, {«$pull»: {«категория»: идентификатор категории}}), и это сработало, судя по всему!