【问题标题】:Map-Reduce to combine data (MongoDb)Map-Reduce 组合数据 (MongoDb)
【发布时间】:2015-02-25 08:53:44
【问题描述】:

我有两个收藏。

  LogData
 [{
  "SId": 10,
  "NoOfDaya" : 9,
  "Status" : 4
 }
{
"SId": 11,
"NoOfDaya" : 8,
 "Status" : 2
 }]



 OptData 
 [ {
 "SId": 10,
"CId": 12,
"CreatedDate": ISO(24-10-2014)
}

 {
  "SId": 10,
  "CId": 13,
  "CreatedDate": ISO(24-10-2014)
}]

现在使用 mongoDB 我需要在表单中查找数据

select  a.SPID,a.CreatedDate,CID=(MAX(a.CID)) from OptData a     
Join LogData c  on a.SID=c.SID where Status>2
group by a.SPID,a.CreatedDate

LogData 有 600 条记录,而 OPTData 有 9000 万条生产记录。我需要经常更新 LogData,这就是为什么它在单独的集合中。

  1. 请不要建议将数据保存在一个集合中。
  2. 这是同一个查询,我用不同的方法问Creating file in GridFs (MongoDb)
  3. 请不要建议无法在 mongoDB 中应用 Join。

【问题讨论】:

    标签: sql mongodb mapreduce


    【解决方案1】:

    由于 MongoDB 不支持 JOIN,因此您必须执行两个单独的查询并在应用层执行 JOIN。只有 600 个文档,LogData 集合非常小,因此将其完全加载到应用程序内存中并使用它来丰富从 OptData 返回的结果应该没有问题。

    另一种选择是通过在 OptData 中的相应文档中从 LogData 中镜像您需要的字段来对 LogData 中的数据进行非规范化。因此,您的 OptData 文档将如下所示:

    {
       "SId": 10,
       "CId": 12,
       "CreatedDate": ISO(24-10-2014),
       "LogStatus": 2
    }
    

    【讨论】:

    • 正确。所以我正在尝试采用第二种方法,但该怎么做呢? Map-Reduce 不支持这样的事情。
    • @sangita 您必须更新所有文档。这将需要编写一个执行第一种方法中描述的程序。
    • 第一种方法不适合我的问题。它应该可以在 mongoDB 级别解决。你一次又一次地建议我做同样的事情。
    • @sangita 很抱歉 MongoDB 没有按照您希望的方式工作。
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多