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

时间:2014-04-07 00:33:18

标签: python mongodb pymongo

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

2 个答案:

答案 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)