字段出现的文档数 - MongoDB

时间:2016-02-25 13:15:16

标签: java mongodb query-optimization

我的java应用程序使用map-reduce从MongoDB集合中检索几个字符串<field's name, types>
例如,我有:

<_id,ObjectId>
<name, String,Object>
<dateOfBirth, String,Date>

这意味着在我的收藏集中有_id字段只是ObjectIdnameStringObject和{{ 1}}可以是dateOfBirthString
现在,我的目标是找到字段出现的文档数。所以我写了这个java方法

Date

此方法正常工作:在输入中给出一个表示字段名称的字符串,它会找到字符串出现的文档数。 所以,对于每个领域我都有这样的东西:

public int countFields(String s) {

        DBObject query = new BasicDBObject(s,new BasicDBObject("$exists",1));

        int n = coll.find(query).count();
        return n;

    }

这意味着<_id, 500> <name,340> <dateOfBirth, 100> 出现在我的收藏集的500个文档中,{340}中的_id和100中的name

假设我必须为集合的所有字段运行此方法:它效率不高!
例如,我的集合中有大约30k个文档,我为每个字段运行dateOfBirth方法{{1并且它需要大约3秒来检索字段出现的文档数量。
我该怎么做才能在此查询中获得更好的性能?

1 个答案:

答案 0 :(得分:1)

您可以执行简单的map-reduce来计算集合中的所有顶级字段:

db.coll.mapReduce(
    function(){
        for (var field in this) { 
            emit(field, 1); 
        }            
    },
    function(field, times) {
        return Array.sum(times);
    }
)