在mongodb中查询符合条件的文档及其所有子文档
我有一个MongoDB存储来自不同传感器的数据。 其结构如下:在mongodb中查询符合条件的文档及其所有子文档,mongodb,Mongodb,我有一个MongoDB存储来自不同传感器的数据。 其结构如下: { "_id" : 1, "sensorName" : "Heart Rate", "samplePeriod" : 1000, "data" : [ { "timestamp" : NumberLong("1483537204046"), "dataPoints" : [ 68 70 ]
{
"_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之间”匹配
我知道聚合,但不知道如何不仅返回匹配的子文档,而且返回整个“心率”——在“数据”中仅包含匹配子文档的文档
我的结构有效率吗?您是否有任何关于高效查询此类数据的更好结构的提示
提前谢谢 您可以尝试下面的方法 $match保存心率记录 $filter用于筛选具有条件的子文档 $project以显示结果
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]
}]
}
}
}
}
}])
很好用!非常感谢。在JavaSpring中有什么方法可以做到这一点吗?