获取具有一定值的记录计数的高性能方法

时间:2019-05-24 13:15:26

标签: mongodb

我有两个集合peopleactions,它们以1:n的比例相连,所以每个人都可以有很多动作。

我正在寻找一种有效的方法来获得采取特定行动的人数。

我所做的是在actions上创建一个汇总,匹配相关文档,然后对其进行分组和投影,然后计算生成的文档。虽然这对于小型数据集非常适用,但是当许多操作符合我的条件时,它对于大型集合来说会花费太长时间(太长的时间,从PHP查询时,我会收到超时)。

这是聚合管道:

db.actions.aggregate(
[
    { 
        "$match" : {
            "name" : {
                "$ne" : null
            }
        }
    }, 
    { 
        "$group" : {
            "_id" : {
                "person_nosql_id" : "$person_nosql_id"
            }, 
            "COUNT(person_nosql_id)" : {
                "$sum" : 1.0
            }
        }
    }, 
    { 
        "$project" : {
            "person_nosql_id" : "$_id.person_nosql_id", 
            "COUNT(person_nosql_id)" : "$COUNT(person_nosql_id)", 
            "_id" : 0.0
        }
    }
], 
{ 
    "allowDiskUse" : true
}

);

person_nosql_id是到people的外键连接。在我的收藏中,我有25万人,总共进行了460万次操作。 groupproject阶段分别需要15秒钟。

您知道任何加快查询速度的方法吗?还是获得所需结果的另一种方法?我已经设置了所有相关的索引。

0 个答案:

没有答案