簡體   English   中英

使用Python和PyMongo從所有MongoDB文檔中刪除屬性

[英]Remove attribute from all MongoDB documents using Python and 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

$unset周圍加上引號,命名你所包含的參數( multi )並使用正確的true語法:

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

只是發現奇怪的是必須為要刪除的字段附加一個任意值,例如一個小數字(1),一個空字符串('')等,但它在MongoDB doc中真的提到過,在JavaScript中有示例:

$未設置

$ unset運算符刪除特定字段。 請考慮以下語法:

{$ unset:{field1:“”,...}}

$ unset表達式中的指定值(即“”)不會影響操作。

對於Python / PyMongo,我想把值設為None

{'$unset': {'field1': None}}

因此,對於OP的問題,它將是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM