mongodb:减少与特定过滤器匹配的所有值(-1.5)
mongodb: decrease all values (in -1.5) that match with specific filters
我正在尝试降低与“sensor_id”:2 和“location_id”:1 匹配的所有“温度值”,我需要将它们降低到 - 1.5。
这是合集:
db.testsensores.insert([{"timestamp":"2020-07-01T00:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":1,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Temperatura","valor":22.08,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":34.92,"unidad":"%"}]},
{"timestamp":"2020-07-01T10:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":2,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Emision_CO2","valor":2.055,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00269,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":1,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Temperatura","valor":21.12,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":37.7,"unidad":"%"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":2,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Emision_CO2","valor":2.102,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00272,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-01T10:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":1,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Temperatura","valor":16.61,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":83.74,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":2,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Emision_CO2","valor":1.572,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00188,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":1,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Temperatura","valor":15.75,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":83.08,"unidad":"%"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":2,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Emision_CO2","valor":1.626,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00146,"unidad":"kWh/m2"}]}])
这就是我想要做的:
db.testsensores.updateMany(
{"sensor_id":2, "location_id":1,"medidas.tipo_medida":"temperatura"},
{$set:{"medidas.valor":{"medidas.valor"-1.5}}}
)
它不工作,你能指导我如何工作吗?非常感谢。
使用arrayFilters
匹配和更新数组元素。请注意,在您的示例数据集中,文档的 none 是匹配的,因此我稍微修改了查找条件以演示查询。
db.collection.update({
"sensor_id": 1,
"location_id": 2
},
{
$inc: {
"medidas.$[element].valor": -1.5
}
},
{
arrayFilters: [
{
"element.tipo_medida": "Temperatura"
}
],
multi: true
})
这里是Mongo playground供您参考。
我正在尝试降低与“sensor_id”:2 和“location_id”:1 匹配的所有“温度值”,我需要将它们降低到 - 1.5。
这是合集:
db.testsensores.insert([{"timestamp":"2020-07-01T00:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":1,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Temperatura","valor":22.08,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":34.92,"unidad":"%"}]},
{"timestamp":"2020-07-01T10:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":2,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Emision_CO2","valor":2.055,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00269,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":1,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Temperatura","valor":21.12,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":37.7,"unidad":"%"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-28T11:30:00Z","sensor_id":2,"location_id":2, "Coordenadas":[37.409311, -5.949939], "Ubicacion":"Sevilla", "medidas":[{"tipo_medida":"Emision_CO2","valor":2.102,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00272,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-01T10:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":1,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Temperatura","valor":16.61,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":83.74,"unidad":"%"}]},
{"timestamp":"2020-07-01T00:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":2,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Emision_CO2","valor":1.572,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00188,"unidad":"kWh/m2"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":1,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Temperatura","valor":15.75,"unidad":"ºC"},{"tipo_medida":"Humedad_relativa","valor":83.08,"unidad":"%"}]},
{"timestamp":"2020-07-10T00:00:00Z", "fecha_instalacion":"2020-05-25T10:30:00Z","sensor_id":2,"location_id":1, "Coordenadas":[41.638597,4.740186], "Ubicacion":"Valladolid", "medidas":[{"tipo_medida":"Emision_CO2","valor":1.626,"unidad":"gCO2/m2"},{"tipo_medida":"Consumo_electrico","valor":0.00146,"unidad":"kWh/m2"}]}])
这就是我想要做的:
db.testsensores.updateMany(
{"sensor_id":2, "location_id":1,"medidas.tipo_medida":"temperatura"},
{$set:{"medidas.valor":{"medidas.valor"-1.5}}}
)
它不工作,你能指导我如何工作吗?非常感谢。
使用arrayFilters
匹配和更新数组元素。请注意,在您的示例数据集中,文档的 none 是匹配的,因此我稍微修改了查找条件以演示查询。
db.collection.update({
"sensor_id": 1,
"location_id": 2
},
{
$inc: {
"medidas.$[element].valor": -1.5
}
},
{
arrayFilters: [
{
"element.tipo_medida": "Temperatura"
}
],
multi: true
})
这里是Mongo playground供您参考。