如何使用pymongo更新MongoDB中创建的文档?
例如:我有一个数据集:
name weight amount
-------------------------
apple 2 3
banana 2 5
我想得到水果的重量:重量*数量
name weight amount total
-----------------------------------
apple 2 3 6
banana 2 5 10
如何更新光标文件????
myFile = [
{"name":"Appel", "weight":2, "amount":3}, {"name":"banana", "weight":2, "amount":5}
]
myCollection.insert_many(myFile)
fruits = myCollection.find()
for fruit in fruits:
total = fruit["weight"]*fruit["amount"]
????? What should I do now? ?????
答案 0 :(得分:1)
您可以使用新字段total
更新集合,如下所示replace_one():
for fruit in fruits:
fruit["total"] = fruit["weight"] * fruit["amount"]
myCollection.replace_one({"_id": fruit["_id"]}, fruit)
值得注意的是,您应该考虑使用PyMongo Bulk Write Operations,而不是循环整个集合并逐个保存文档,尤其是Unordered Bulk Write Operations
根据您的使用情况,您也可以使用Aggregation Pipeline来计算服务器端值:
db.fruits.aggregate([
{$project:{name:1,
weight:1,
amount:1,
total:{$multiply:["$weight", "$amount"]}}},
{$out:"fruits_modified"}
]);
上面的聚合管道,使用total
和weight
字段的乘法结果值投影新字段amount
。将结果保存到名为fruits_modified
的其他集合中。
然后,您可以删除fruits
集合,并重命名fruits_modified
以进行交换,例如:
db.fruits.drop();
db.fruits_modified.renameCollection("fruits");
请注意,在删除集合时正在执行的任何操作可能会丢失。考虑两种方法,并根据您的用例使用。