【发布时间】:2014-08-13 18:55:03
【问题描述】:
我有以下数据结构,并希望将包含 loc 字段的文档嵌入到包含持续时间的文档中,但前提是时间戳在时间戳 (ts) 减去父文档的持续时间(以秒为单位)之内。 这可以通过聚合框架实现还是通过 map reduce 实现?
{
"_id" : ObjectId("53df2a44e6583c76253c9869"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T08:37:55.000Z"),
"duration" : NumberLong(1642),
}
{
"_id" : ObjectId("53df2a41e6583c4e243c9869"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T08:37:53.000Z"),
"loc" : {
"lon" : 5.1101453,
"lat" : 52.0625047
}
}
{
"_id" : ObjectId("53df2a3fe6583c38203c986a"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T08:37:50.000Z"),
"loc" : {
"lon" : 5.1101297,
"lat" : 52.0625031
}
}
{
"_id" : ObjectId("53df2a44e6583c76253c9869"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T06:37:55.000Z"),
"duration" : NumberLong(3600),
}
{
"_id" : ObjectId("53df2a38e6583c03253c9869"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T06:37:44.000Z"),
"loc" : {
"lon" : 5.1101176,
"lat" : 52.0625171
}
}
{
"_id" : ObjectId("53df2a33e6583c51243c9869"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T06:37:38.000Z"),
"loc" : {
"lon" : 5.1101409,
"lat" : 52.0625818
}
}
{
"_id" : ObjectId("53df2a2de6583c38203c9869"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T06:37:32.000Z"),
"loc" : {
"lon" : 5.1099513,
"lat" : 52.0624157
}
}
这是所需的格式
{
"_id" : ObjectId("53df2a44e6583c76253c9869"),
"deviceId" : NumberLong(1377700226807),
"ts" : ISODate("2014-08-04T08:37:55.000Z"),
"duration" : NumberLong(1642),
"data" : [
{
"ts" : ISODate("2014-08-04T08:37:53.000Z"),
"loc" : {
"lon" : 5.1101453,
"lat" : 52.0625047
}
},
{
"ts" : ISODate("2014-08-04T08:37:50.000Z"),
"loc" : {
"lon" : 5.1101297,
"lat" : 52.0625031
}
}
]
}
【问题讨论】:
-
你能提供一份文件来说明你想要的输出吗?您要更改集合中的文档还是创建新文档?您是否在一个集合中混合了不同类型的文档?您如何使用这些文件?从表面上看,这似乎是一个最好通过模式设计而不是聚合或 map/reduce 解决的问题。
-
我添加了示例,我更喜欢修改当前数据,但创建新集合也是一种选择。该集合包含汽车事件数据,事件可以是包含持续时间和结束时间的行程结束事件。它还将包含在骑行过程中发生的位置事件。这些事件存储在同一个集合中。目前我正在通过 cron 处理它,但想知道我是否可以通过聚合来处理它。但是认为这是不可能的,因为没有什么可以做的。
标签: javascript mongodb mapreduce mongodb-query aggregation-framework