PyMongo遍历文档中的文档/数组,替换找到的值

时间:2018-03-29 23:22:42

标签: python arrays pymongo

我在Mongodb中有以下数据:

{ "_id" : 1, "items" : [ "apple", "orange", "plum" ] }
{ "_id" : 2, "items" : [ "orange", "apple", "pineapple" ] }
{ "_id" : 3, "items" : [ "cherry", "carrot", "apple" ] }
{ "_id" : 4, "items" : [ "sprouts", "pear", "lettuce" ] }

我正在尝试使用Python / PyMongo创建一个函数,它接受2个参数,一个旧字符串和一个新字符串。我想在所有文档中的所有数组中找到所有“apple”,并用字符串“banana”替换它们。

以下是我目前的代码:

def update(old, new):
    for result in db.collection.find({"items" : old}):
        for i in result["items"]:
            if i == old:
                db.collection.update({"_id": result["._id"]}, {"$set": {"items": new}})

2 个答案:

答案 0 :(得分:0)

最后想出来的,实际上非常简单:

from pymongo import MongoClient

mongo_client = MongoClient(127.0.0.1, 27017)
db = mongo_client.my_databse

def update(old, new)
    for result in db.collection.find({'items' : old}):
        db.collection.update_one({ '_id': result['_id'], 'items': old}, { '$set' : {'items.$' : new}})

答案 1 :(得分:0)

使用update_many()在一个查询中更新多个文档,而不是循环遍历文档     来自pymongo import MongoClient

mongo_client = MongoClient(127.0.0.1, 27017)
db = mongo_client.my_databse

def update(old, new)
     db.collection.update_many({'items': old}, { '$set' : {'items.$' : new}})

对于小于 3.2的pymongo ,请使用带多标志的更新

def update(old, new)
     db.collection.update({'items': old}, { '$set' : {'items.$' : new}}, multi=True)