Ответ 1
Поместите кавычки вокруг $unset
, назовите параметр, который вы включаете (multi
), и используйте правильный синтаксис для true:
mongo.db.collection.update({}, {'$unset': {'parent.toremove':1}}, multi=True)
В моем MongoDB существует куча этих документов:
{ "_id" : ObjectId("5341eaae6e59875a9c80fa68"),
"parent" : {
"tokeep" : 0,
"toremove" : 0
}
}
Я хочу удалить атрибут parent.toremove
в каждом из них.
Используя оболочку MongoDB, я могу выполнить это, используя:
db.collection.update({},{$unset: {'parent.toremove':1}},false,true)
Но как это сделать в Python?
app = Flask(__name__)
mongo = PyMongo(app)
mongo.db.collection.update({},{$unset: {'parent.toremove':1}},false,true)
возвращает следующую ошибку:
File "myprogram.py", line 46
mongo.db.collection.update({},{$unset: {'parent.toremove':1}},false,true)
^
SyntaxError: invalid syntax
Поместите кавычки вокруг $unset
, назовите параметр, который вы включаете (multi
), и используйте правильный синтаксис для true:
mongo.db.collection.update({}, {'$unset': {'parent.toremove':1}}, multi=True)
Просто было странно добавлять произвольное значение для поля, которое нужно удалить, например, небольшое число (1), пустую строку ('') и т.д., Но это действительно упоминалось в документации MongoDB, с примером в JavaScript:
$unset
Оператор $ unset удаляет определенное поле. Рассмотрим следующий синтаксис:
{ $unset: { field1: "",... } }
Указанное значение в выражении $ unset (т.е. "") не влияет операция.
Для Python/PyMongo я хотел бы указать значение None
:
{'$unset': {'field1': None}}
Итак, для вопроса ОП это будет:
mongo.db.collection.update({}, {'$unset': {'parent.toremove': None}}, multi=True)