【问题标题】:Remove attribute from all MongoDB documents using Python and PyMongo使用 Python 和 PyMongo 从所有 MongoDB 文档中删除属性
【发布时间】:2014-05-19 01:38:47
【问题描述】:

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

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      只是觉得很奇怪必须为要删除的字段附加任意值,例如小数字(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删除多个字段怎么样?
      猜你喜欢
      • 2020-11-21
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多