【问题标题】:Mongo 2.4 : Insert document in Reduce phase (mongo map red)Mongo 2.4:在Reduce阶段插入文档(mongo map red)
【发布时间】:2014-05-30 14:30:46
【问题描述】:

我们的输入是这样的

{ _id: 1,  deviceuuid: "d1",  sessiontime: 10, timestamp = 123456789123 }
{ _id: 2,  deviceuuid: "d1",  sessiontime: 13, timestamp = 123456789129 }
{ _id: 3,  deviceuuid: "d1",  sessiontime: 15, timestamp = 123456789133 }
{ _id: 4,  deviceuuid: "d1",  sessiontime: 16, timestamp = 123456789153 }
{ _id: 5,  deviceuuid: "d1",  sessiontime: 17, timestamp = 123456789163 }
{ _id: 6,  deviceuuid: "d2",  sessiontime: 10, timestamp = 123456789123 }
{ _id: 7,  deviceuuid: "d2",  sessiontime: 13, timestamp = 123456789129 }
{ _id: 8,  deviceuuid: "d2",  sessiontime: 15, timestamp = 123456789133 }
{ _id: 9,  deviceuuid: "d2",  sessiontime: 16, timestamp = 123456789153 }
{ _id: 10,  deviceuuid: "d2",  sessiontime: 17, timestamp = 123456789163 } 

我们收到的是累积的“会话时间”事实。所以我们的要求是计算delta并放入不同的集合

在地图阶段: 我发出密钥:< deviceuuid> 和值:{ sessiontime:<value>, timestamp=<value>}

在减少阶段: 我正在按时间戳对值进行排序并计算增量

 e.g. for device uuid “d1”
10 -0 => 10
13 -10 => 3
15 -13 => 2
16 -15 => 1
17 -16 => 1 

我们需要将上述数据插入到不同的集合中,但 db 对象在 reduce 阶段不可用 即

db.result.save(..)  Giving error in reduce phase

请推荐!!

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    无论是在 map 还是在 reduce 阶段,都不可能对任何集合进行任何修改。您唯一能做的就是将 map-reduce 的整个结果保存到另一个集合中。

    【讨论】:

    • 是否将文档添加到其他集合中也视为修改?
    • 任何集合中的任何修改
    • 还有其他方法可以达到上述效果吗?
    • 我不完全了解您的需求。您可以使用“out”和“merge”选项将 MapReduce 的整个输出放到另一个集合中。或者,您可以在代码或 mongo shell 中解析输出,并将所需的任何内容插入到任何集合中
    • 就Reduce阶段的输出而言,它产生/返回单个值。但是我们的要求是产生多个值(根据我们上面的用例),这就是我们试图在 reduce 阶段插入文档的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2014-06-02
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多