Sql 映射减少以合并数据(MongoDb)

Sql 映射减少以合并数据(MongoDb),sql,mongodb,mapreduce,Sql,Mongodb,Mapreduce,我有两个收藏 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-20

我有两个收藏

  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万条记录。我需要经常更新日志数据,这就是为什么它在单独的集合中

  • 请不要建议将数据保存在一个集合中
  • 这是同一个问题,我用不同的方法问
  • 请不要建议不能在mongoDB中应用联接

  • 因为MongoDB不支持连接,所以必须执行两个单独的查询,并在应用层上进行连接。由于只有600个文档,收集的日志数据非常小,因此完全将其加载到应用程序内存中并使用它来丰富OptData返回的结果应该没有问题

    另一个选项是通过镜像OptData中相应文档中的LogData中所需的字段,从LogData中反规范化数据。因此,您的OptData文档将如下所示:

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

    对的所以我试着做第二种方法,但是怎么做呢?Map Reduce不支持任何类似的操作。@sangita您必须更新所有文档。这将需要编写一个程序来完成第一种方法中描述的内容。第一种方法不适合我的问题。它应该在mongoDB级别上是可解的。你一次又一次地向我建议同样的事情。@sangita我很抱歉MongoDB没有按照你希望的方式工作。