我有一个数据库,其中包含表示时间序列测量的文档。
'value esMin'可以在范围0-
{
"timeStampHour" : ISODate("2019-02-28T12:00:00.000Z"),
"valuesMin" : {
"0" : 20,
"1" : 20,
"2" : 22,
"3" : 23,
....
"54" : 32
}
}
{
"timeStampHour" : ISODate("2019-02-28T13:00:00.000Z"),
"valuesMin" : {
"5" : 20,
"10" : 25,
"14" : 27,
"15" : 30,
....
"59" : 40
}
}
如何搜索任何“value esMin”字段包含值$gte 35的文档?
大致如下的东西:
db.getCollection('sensorData').find({
'timeStampHour':{
$elemMatch:{'valuesMin.*':{$gte: 35}}
}
})
我的搜索似乎表明真正的“*”通配符是不可行的,但是如果我知道键总是在“0”和“59”之间,是否有解决办法?
这可以使用$object tToArray和$arrayToObject实现
db.q3.aggregate([
{$project: {"valuesMin": {$objectToArray: "$valuesMin"}}},
{$match:{"valuesMin.v": {$gte: 35}}},
{$project: {"valuesMin": {$arrayToObject: "$valuesMin"}}}
])