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不支持连接,所以必须执行两个单独的查询,并在应用层上进行连接。由于只有600个文档,收集的日志数据非常小,因此完全将其加载到应用程序内存中并使用它来丰富OptData返回的结果应该没有问题 另一个选项是通过镜像OptData中相应文档中的LogData中所需的字段,从LogData中反规范化数据。因此,您的OptData文档将如下所示:
{
"SId": 10,
"CId": 12,
"CreatedDate": ISO(24-10-2014),
"LogStatus": 2
}
对的所以我试着做第二种方法,但是怎么做呢?Map Reduce不支持任何类似的操作。@sangita您必须更新所有文档。这将需要编写一个程序来完成第一种方法中描述的内容。第一种方法不适合我的问题。它应该在mongoDB级别上是可解的。你一次又一次地向我建议同样的事情。@sangita我很抱歉MongoDB没有按照你希望的方式工作。