使用Python和PyMongo从所有MongoDB文档中删除属性

使用Python和PyMongo从所有MongoDB文档中删除属性,python,mongodb,pymongo,Python,Mongodb,Pymongo,在我的MongoDB中,存在大量这样的文档: { "_id" : ObjectId("5341eaae6e59875a9c80fa68"), "parent" : { "tokeep" : 0, "toremove" : 0 } } 我想删除每个文件中的parent.toremove属性 使用MongoDB shell,我可以通过以下方式完成此任务: db.collection.update({},{$unset: {'parent.toremove':1}},

在我的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

$unset
周围加引号,命名要包含的参数(
multi
),并使用正确的语法表示true:

mongo.db.collection.update({}, {'$unset': {'parent.toremove':1}}, multi=True)

刚发现必须为要删除的字段附加一个任意值很奇怪,例如一个小数字(1)、一个空字符串(“”)等等,但MongoDB文档中确实提到了它,JavaScript中的示例如下:

美元未结算

$unset运算符删除特定字段。考虑下面的语法:

{$unset:{field1::,…}

$unset表达式中的指定值(即“”)不影响 手术

对于Python/PyMongo,我想输入一个值
None

{'$unset': {'field1': None}}
因此,OP的问题是:

mongo.db.collection.update({}, {'$unset': {'parent.toremove': None}}, multi=True)

用pymong删除多个字段怎么样?