我的java应用程序使用map-reduce来检索几个字符串<field's name, types>
来自 MongoDB 集合。
例如我有:
<_id,ObjectId>
<name, String,Object>
<dateOfBirth, String,Date>
这意味着在我的 Collection 中有 _id
的文档字段只是一个 ObjectId
, name
是 String
或Object
和dateOfBirth
可以是 String
和Date
。
现在,我的目标是查找出现字段的文档数量。所以我写了这个java方法
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>
这意味着_id
存在于我 Collection 的 500 份文档中,name
340 和 dateOfBirth
100 以内。
假设我必须对集合的所有字段运行此方法:效率不高!
例如,对于我的集合中大约 30k 的文档,我运行 countFields(s)
每个字段的方法s
检索某个字段出现的文档数量大约需要 3 秒。
我该怎么做才能在该查询上获得更好的性能?
最佳答案
您可以执行简单的映射缩减来计算集合中的所有顶级字段:
db.coll.mapReduce(
function(){
for (var field in this) {
emit(field, 1);
}
},
function(field, times) {
return Array.sum(times);
}
)
关于java - 字段出现的文档数量 - MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628380/