我有一个 MongoDB 存储来自不同传感器的数据。它具有以下结构:
{
"_id" : 1,
"sensorName" : "Heart Rate",
"samplePeriod" : 1000,
"data" : [
{
"timestamp" : NumberLong("1483537204046"),
"dataPoints" : [ 68 70 ]
},
{
"timestamp" : NumberLong("1483537206046"),
"dataPoints" : [ 68 70 ]
}
]
}
{
"_id" : 2,
"sensorName" : "Ambient Light",
"samplePeriod" : 500,
"data" : [
{
"timestamp" : NumberLong("1483537204058"),
"dataPoints" : [ 56, 54, 54, 54 ]
},
{
"timestamp" : NumberLong("1483537206058"),
"dataPoints" : [ 56, 54, 54, 54 ]
}
]
}
例如,现在我需要“心率” - 包含所有字段及其“数据”的文档 - 匹配条件“时间戳在 1483537204000 和 1483537214000 之间”的子文档。
我已经在另一个问题中得到了关于如何在 mongo shell 中执行此操作的答案。请参阅此代码:
aggregate([{
$match: {
"_id": 1
}
}, {
"$project": {
"_id": 1,
"sensorName": 1,
"samplePeriod": 1,
"data": {
"$filter": {
"input": "$data",
"as": "result",
"cond": {
$and: [{
$gte: ["$$result.timestamp", 1483537204000]
}, {
$lte: ["$$result.timestamp", 1483537214000]
}]
}
}
}
}
}])
但是我如何在 java spring-data 中做到这一点?spring-data 中似乎没有像 $filter 这样的东西。有解决方法吗?
无论如何,$filter 的效率如何?你能想出一种更有效/更实用的方式在 mongodb 中构建这种数据吗?
提前致谢!