gpt4 book ai didi

python - 使用 pymongo 更新 Mongo 文档中的平均值

转载 作者:行者123 更新时间:2023-12-01 03:00:28 24 4
gpt4 key购买 nike

我想更新现有 mongodb 文档中的字段。但设定值应为旧值和新值的平均值。

我可以从 mongodb 文档中获取旧值并计算平均值,然后将其设置到字段中,但这不是线程安全的,并且在计算平均值时 mongodb 文档中的旧值可能会发生变化。

示例,文档:

{ '_id': ObjectId("55d49338b9796c337c894df3"), value: 10 }

Python 代码:

# new_value = 15, therefore average_value = 12.5
db.mycollection.update_one(
{'_id': '55d49338b9796c337c894df3'},
{...} <- What there?
)

之前:

{ '_id': ObjectId("55d49338b9796c337c894df3"), value: 12.5 }

最佳答案

您可以使用聚合框架进行更新。为此所需的管道步骤是 $addFields $out $addFields 运算符允许您用结果替换集合中的现有字段一个表达式,其中涉及算术运算符 $avg 计算平均值。

$avg 运算符,如果在 $project 中使用(或 $addFields )阶段,可以接受表达式列表,通过该列表,您可以推送现有字段中的值和用于计算平均值的新值这两个。

$out 运算符作为最后阶段将更新现有集合,因为它将聚合管道的结果文档写入集合。

以下示例描述了上述伪装为聚合操作的更新操作:

new_value = 15
db.mycollection.aggregate([
{ "$addFields": {
"value": { "$avg": ["$value", new_value] }
} },
{ "$out": "mycollection" }
])

或者使用 MongoDB 3.2 使用 $project 作为

new_value = 15
db.mycollection.aggregate([
{ "$project": {
"value": { "$avg": ["$value", new_value] }
} },
{ "$out": "mycollection" }
])

关于python - 使用 pymongo 更新 Mongo 文档中的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43893419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com