我試圖獲得 "location_id "中濕度最小的5個檔案。1". 但是只有從周一到周五,從上午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" : "oC".
},
{
"tipo_medida"/span> : "Humedad_relativa"/span>,
"valor" : 84.32,
"unidad" : "%".
}
]
}
{
"_id" : ObjectId("609c2c2d420a73728827e880")。
"timestamp" : ISODate("2020-07-01T02:15:00Z")。
"sensor_id" : 2,
"location_id" : 1,
"medidas" : [
{
"tipo_medida"/span> : "Emision_CO2"/span>,
"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" /span>: 0, "medidas"/span>:{$slice: ["$medidas",-1]},"location_id":1}.
},
{
$add-Fields:{dia_semana:{$dayOfWeek: "$timestamp"},Hora:{$hour:"$timestamp"}}.
},
{
$match:{'medidas.tipo_medida'/span>: "Humedad", "location_id":1}。
},
{
$match:{$and:[{'dia_semana':{$in: [2,3, 4, 5,6]},'Hora'/span>: {$gt:8, $lt:18}]}。
},
{$sort:{"medidas.valor":1}}, {$limit:5}])
但什么也沒有發生....
***日期欄位是字串,這就是為什么我使用$DatefromString
。uj5u.com熱心網友回復:
我改變了你的查詢并修復了一些東西
首先洗掉DatefromString
db.collection.aggregate( [
{
$project: {
timestamp: 1,
_id: 0,
"medidas"/span>: {
$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"/span>: {
$in: [
2,
3,
4,
5,
6.
]
},
"Hora": {
$gt: 8,
$lt: 18$sort: {
"medidas.valor": 1.
}
},
{
$limit: 5
在檢查了你的查詢后,這個聚合將回傳這樣的結果
{
$project: {
timestamp: 1,
_id: 0,
"medidas"/span>: {
$slice: [
"$medidas",
-1.
]
},
"location_id": 1
}
},
{
$addFields: {
dia_semana: {
$dayOfWeek: "$timestamp"。
},
Hora: {
$hour: "$timestamp"。
}
}
},
結果 :
[
{
"Hora"/span>。2,
"dia_semana": 4,
"location_id": 1,
"medidas": [
{
"tipo_medida": "Humedad_relativa",
"unidad": "%",
"valor": 84.32.
}
],
"timestamp": ISODate("2020-07-01T02:15:00Z"/span>)
},
{
"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"/span>)
}
]
在這個結果中,我們沒有在管道中添加匹配階段,如果你看到 你的匹配沒有選擇任何結果,原因很多
1-$match:{'medidas.tipo_medida':
2- 'Hora':{$gt:8, $lt:18}}
在你的結果中,在聚合的匹配階段之前,你沒有任何結果與我強調的這些查詢相匹配
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310894.html
標籤:
上一篇:獲取符合周期性的日期并獲得序列號
下一篇:我嘗試使用pythonopenpyxl在excel中創建多個作業表以在回圈中存盤不同的值,但它只創建了一張作業表
