我有一个数据库,其中包含代表时间序列测量值的文档。
'valuesMin'可以在0-> 59的范围内,但不能保证所有60个值都会存在。
{
"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
}
}
如何搜索任何“ valuesMin”字段包含值$ gte 35的文档?
类似的东西:
db.getCollection('sensorData').find({
'timeStampHour':{
$elemMatch:{'valuesMin.*':{$gte: 35}}
}
})
我的搜索似乎表明不能使用真正的“ *”通配符,但是如果我知道密钥始终在'0'和'59'之间,是否可以解决?
答案 0 :(得分:0)
可以使用$objectToArray 和$arrayToObject
实现db.q3.aggregate([
{$project: {"valuesMin": {$objectToArray: "$valuesMin"}}},
{$match:{"valuesMin.v": {$gte: 35}}},
{$project: {"valuesMin": {$arrayToObject: "$valuesMin"}}}
])