MongoDB搜索子文档中包含一系列键名?

时间:2019-03-02 01:56:49

标签: mongodb

我有一个数据库,其中包含代表时间序列测量值的文档。

'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'之间,是否可以解决?

1 个答案:

答案 0 :(得分:0)

可以使用$objectToArray $arrayToObject

实现
db.q3.aggregate([
    {$project: {"valuesMin": {$objectToArray: "$valuesMin"}}},
    {$match:{"valuesMin.v": {$gte: 35}}},
    {$project: {"valuesMin": {$arrayToObject: "$valuesMin"}}}
])