在我的MongoDB中,存在大量这些文档:
{ "_id" : ObjectId("5341eaae6e59875a9c80fa68"),
"parent" : {
"tokeep" : 0,
"toremove" : 0
}
}
我想删除每一个中的parent.toremove
属性。
使用MongoDB shell,我可以使用以下方法完成此任务:
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
答案 0 :(得分:20)
在$unset
周围加上引号,为您包含的参数(multi
)命名,并使用正确的语法:
mongo.db.collection.update({}, {'$unset': {'parent.toremove':1}}, multi=True)
答案 1 :(得分:0)
只是觉得很奇怪,必须为要删除的字段附加一个任意值,例如一个小数(1),一个空字符串('')等,但是在MongoDB文档中确实提到了这一点,其中包含JavaScript中的示例:
$ unset
$ unset运算符删除特定字段。请考虑以下语法:
{$ unset:{field1:“”,...}}
$ unset表达式中的指定值(即“”)不影响 操作。
对于Python / PyMongo,我想输入一个值None
:
{'$unset': {'field1': None}}
因此,对于OP的问题,应该是:
mongo.db.collection.update({}, {'$unset': {'parent.toremove': None}}, multi=True)