我在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}})
答案 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)