$DatefromString MongoDB 并获取文档



我试图在"location_id: 1"中获得具有最小湿度值的5个文档。但只有周一到周五,早上8点到下午6点。集合,db。Datos_sensores2中有如下文档:

{
"_id" : ObjectId("609c2c2d420a73728827e87f"),
"timestamp" : ISODate("2020-07-01T02:15:00Z"),
"sensor_id" : 1,
"location_id" : 1,
"medidas" : [
{
"tipo_medida" : "Temperatura",
"valor" : 14.03,
"unidad" : "ºC"
},
{
"tipo_medida" : "Humedad_relativa",
"valor" : 84.32,
"unidad" : "%"
}
]
}
{
"_id" : ObjectId("609c2c2d420a73728827e880"),
"timestamp" : ISODate("2020-07-01T02:15:00Z"),
"sensor_id" : 2,
"location_id" : 1,
"medidas" : [
{
"tipo_medida" : "Emision_CO2",
"valor" : 1.67,
"unidad" : "gCO2/m2"
},
{
"tipo_medida" : "Consumo_electrico",
"valor" : 0.00155,
"unidad" : "kWh/m2"
}
]
}

我写的是:

db.datos_sensores2.aggregate([
{
$project:{
timestamp:{$dateFromString:{dateString:'$timestamp'}},"_id":0, "medidas":{$slice:["$medidas",-1]},"location_id":1}
},
{
$add-Fields:{dia_semana:{$dayOfWeek:"$timestamp"},Hora:{$hour:"$timestamp"}}
},
{
$match:{'medidas.tipo_medida': "Humedad", "location_id":1}
},
{
$match:{$and:[{'dia_semana':{$in:[2,3,4,5,6]},'Hora':{$gt:8, $lt:18}}]}
},
{$sort:{"medidas.valor":1}},{$limit:5}])

但是什么也没发生....

**日期字段是字符串,这就是为什么我使用$DatefromString

我改变你的查询和修复一些东西首先移除DatefromString

db.collection.aggregate([
{
$project: {
timestamp: 1,
_id: 0,
"medidas": {
$slice: [
"$medidas",
-1
]
},
"location_id": 1
}
},
{
$addFields: {
dia_semana: {
$dayOfWeek: "$timestamp"
},
Hora: {
$hour: "$timestamp"
}
}
},
{
$match: {
"medidas.tipo_medida": "Humedad",
"location_id": 1
}
},
{
$match: {
$and: [
{
"dia_semana": {
$in: [
2,
3,
4,
5,
6
]
},
"Hora": {
$gt: 8,
$lt: 18
}
}
]
}
},
{
$sort: {
"medidas.valor": 1
}
},
{
$limit: 5
}
])

检查您的查询后,此聚合将返回以下

{
$project: {
timestamp: 1,
_id: 0,
"medidas": {
$slice: [
"$medidas",
-1
]
},
"location_id": 1
}
},
{
$addFields: {
dia_semana: {
$dayOfWeek: "$timestamp"
},
Hora: {
$hour: "$timestamp"
}
}
},

结果:

[
{
"Hora": 2,
"dia_semana": 4,
"location_id": 1,
"medidas": [
{
"tipo_medida": "Humedad_relativa",
"unidad": "%",
"valor": 84.32
}
],
"timestamp": ISODate("2020-07-01T02:15:00Z")
},
{
"Hora": 2,
"dia_semana": 4,
"location_id": 1,
"medidas": [
{
"tipo_medida": "Consumo_electrico",
"unidad": "kWh/m2",
"valor": 0.00155
}
],
"timestamp": ISODate("2020-07-01T02:15:00Z")
}
]

,在这个结果中,我们没有向管道中添加匹配阶段,如果你看到由于多种原因,您的匹配没有选择任何结果

1-$match:{'medidas.tipo_medida': "Humedad"}

2 -'Hora':{$gt:8, $lt:18}}在聚合的匹配阶段之前的结果中,您没有任何结果与我高亮显示的这些查询相匹配

最新更新