什么是在Mongodb中将大型集合中的每个项目与条件进行比较的最佳方法?

时间:2015-12-21 18:36:59

标签: mongodb

我有一个非常大的集合,每周有大约800万条记录,我需要分析它们以查找相关项目并编制报告。

日志对象

_id:
user_id: int
created_date: date
created_at: datetime
event_id: string
market_data: dict

我需要在一天内找到属于用户的所有对象,并找到与每个具有相同event_id的对象相关且在+/- 5秒的范围内,比较它们的market_data。

示例代码:

var matched_selection = [];

db.selection.find({user_id: _main_id_, date: _date_}).forEach(
  function(main_selection){
    db.selection.find({
      user_id: {$ne: _main_id_},
      event_id: main_selection.event_id,
      created_at: {
        $gte: main_selection.created_at-5000,
        $lte: main_selection.created_at+5000
      }
    }).foreach(
      function(sub_selection){
        // compare main_selection.market_data to sub_selection.market_data
        // and put result to matched_selection array
      }
    )
})

过去我在客户端查询和比较。但由于客户端和服务器之间传输了大量数据,性能非常糟糕。

目前我编写了一个服务器端javascript来比较数据,只返回结果 - 显然更快 - 但服务器端javascript很快就会被弃用。

现在我尝试使用map / reduce,但不允许在地图函数中使用子查询(找到sub_selection的那个)。

在我的案例中,最好的方法是什么?

0 个答案:

没有答案