gpt4 book ai didi

MongoDB 查询用公式更新集合中文档的每个字段

转载 作者:可可西里 更新时间:2023-11-01 10:45:16 25 4
gpt4 key购买 nike

我在 MongoDB 集合中有 5 个文档,它们以 Celsius 存储温度值。我需要创建一个查询,以便将每个值转换为 Fahrenheit。文件格式如下:

{
"_id" : ObjectId("5c3eecfb5c4d120a7c4f5deb"),
"sensorType" : "temperature",
"sensorData" : [
{
"time" : "2018-08-31T19:32:15Z",
"value" : 16
},
{
"time" : "2018-08-31T19:47:21Z",
"value" : 18
},
{
"time" : "2018-08-31T20:02:21Z",
"value" : 23
},
{
"time" : "2018-08-31T20:17:21Z",
"value" : 19
},

它有时间和值,我需要将值转换成完整的sensorData

为了解决这个问题,我从以下查询开始:

db.sensordata.updateMany(
{ sensorType: "temperature" },
{
$set: { "sensorData.$[].value": 8*2 },
}
)

在上面的查询中,我选择了 sensorType 作为 temperature,因为该集合还包含其他 sensorType。在 $set 中,我只是使用一个简单的公式 8*2 来检查查询是否有效。通过运行上述查询,所有值都更新为 16,但我无法先获取当前值,然后进行数学运算将其转换为 华氏度。下面是我们可以使用的公式:

celsius * 9/5  + 32 

我也尝试了以下查询,但它给了我错误:

db.sensordata.updateMany(
{ sensorType: "temperature"},
{
$set:{"sensorData.$[].value": "($sensorData.value * 9/5) + 32"}
})

但不是转换而是将值保存为 ($sensorData.value * 9/5) + 32。谁能帮我创建这个查询?

最佳答案

我找到了一个解决方案,但它分为两个步骤:

第 1 步:运行查询以乘以 9/5

    db.sensordata.update(
{
sensorType: "temperature"
},
{
$mul: { "sensorData.$[].value": 9/5 }
},
{ multi:true}
)

第2步:增加32(相加)结果如下:

    db.sensordata.update(
{
sensorType: "temperature"
},
{
$inc: { "sensorData.$[].value": 32 }
},
{ multi:true }
)

关于MongoDB 查询用公式更新集合中文档的每个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54229447/

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