【发布时间】:2018-01-16 10:58:35
【问题描述】:
我们使用 MongoDB 存储时间序列传感器数据,类似于 https://www.mongodb.com/blog/post/schema-design-for-time-series-data-in-mongodb 中设计的架构
我们在各个时间段内的数据查询方面确实取得了良好的性能。 关于我们的架构设计的说明: "v" 是传感器读数的父键,时间用分和秒转换成嵌套数组。我们使用 "m"(Minute) 作为子父键,然后使用 "s"(Second) 作为分钟读的子键。传感器读数位于 "s" 级别,其中 field1、field2、...、field10 为传感器数据值。
现在我们正在尝试实现一些数据分析工具,并希望通过传感器数据读取值来查询数据。有没有一种有效的方法来查询数据而不在查询中使用嵌套的 for 循环?
例如:
- 具有传感器读数的项目:"field1">2
- 具有传感器读数的项目:"field1">2 和 "field3">5
谢谢一百万。
记录类似于以下示例。
{
"_id": ObjectId("5a5dd49f74bbaefd1ac89fc8"),
"c_id": "1017",
"c_id_s": NumberInt(1017),
"c_t": NumberInt(1516096800),
"type": "hour",
"v": {
"m1": {
"s54": {
"field1": 7.373158,
"entry_id": NumberInt(4635),
"field3": 0.19,
"field2": NumberInt(88)
}
},
"m31": {
"s54": {
"field1": 5.981918,
"entry_id": NumberInt(4637),
"field3": 0.04
},
"s55": {
"field2": NumberInt(89),
"entry_id": NumberInt(4639),
"field5": NumberInt(-67)
}
}
},
"entry_id": NumberInt(4639)
},
{
"_id": ObjectId("5a5dd1a174bbaefd1ac89fc1"),
"c_id": "1024",
"c_id_s": NumberInt(1024),
"c_t": NumberInt(1516096800),
"type": "hour",
"v": {
"m3": {
"s22": {
"field3": 210.479996,
"entry_id": NumberInt(30297)
},
"s23": {
"field1": 3.271534,
"entry_id": NumberInt(30300),
"field8": 7.1875,
"field2": NumberInt(94)
}
},
"m8": {
"s23": {
"field3": 150.639999,
"entry_id": NumberInt(30304),
"field1": 2.948425,
"field8": 7.125,
"field2": NumberInt(94)
}
},
"m13": {
"s23": {
"field3": 99.799995,
"entry_id": NumberInt(30308),
"field1": 2.849621,
"field8": 7.0625,
"field2": NumberInt(95)
}
},
"m18": {
"s23": {
"field3": 59.099998,
"entry_id": NumberInt(30312),
"field1": 2.681393,
"field8": 6.9375,
"field2": NumberInt(95)
}
},
"m19": {
"s8": {
"field5": NumberInt(-87),
"entry_id": NumberInt(30313)
}
}
},
"entry_id": NumberInt(30313)
}
【问题讨论】:
-
请举例说明您希望返回的文档是什么样子。
-
返回的文档可以是符合条件的全部文档
-
@dnickless 返回的文档可以是符合条件的整个文档
-
目前我正在使用这种方式,但是速度很慢: {$and:[{c_id: "415"},{ $where: function() { for(var key in this.v) { for (var subKey in this.v[key]) { if(this.v[key][subKey].field1>2) { return true; } } } 返回错误; } } ] }
-
@leon 你找到什么了吗?我面临着类似的问题。
标签: mongodb mongodb-query aggregation-framework