2012-08-15 72 views
26

例如,有这样一个集合:
如何高效地使用多个键执行“独特”?

{市场: 'SH',代码: '000001',日期: '2012-01-01',价格:1000}
{市场: 'SZ',代码: '000001',日期: '2012-01-01',价格:1000}
{市场: 'SH',代码: '000001',日期: '2012-01-02',价格:1000}
{市场: 'SZ',代码: '000001',日期: '2012-01-02',价格:1000}
{市场: 'SH',代码: '000002',日期: '2012-01-03',价格:1000}
...

此集合包含数千万的文件。

我想打电话给不同的两个键:

collection.distinct('market', 'code'); 

,并得到结果:

[{市场: 'SH',代码: '000001'}, {市场: 'SZ',代码: '000001'},{ 市场: 'SH',代码: '000002'}]

本机独特的命令只接受一个关键,我尝试实施它通过使用map-reduce。但是map-reduce太慢而不是本地独特。在我的一键独特测试中,map-reduce花费的时间比native distinct长十倍。
有没有一种有效的方法来实现multikey不同?

回答

53

如果你愿意等待即将到来的2.2版本的MongoDB,您可以有效地使用聚合框架运行此查询:

collection = db.tb; 
result = collection.aggregate( 
      [ 
       {"$group": { "_id": { market: "$market", code: "$code" } } } 
      ] 
     ); 
printjson(result); 

在我的测试机上百万记录收集,该跑4秒,而地图/减少版本花费了一分钟。

相关问题