mongodb 在巨大的数据集上聚合

标签 mongodb aggregation-framework

我有一个包含超过 1 亿个文档的 mongodb 数据库。我想做聚合,这样我就可以提供文档的统计数据。 我的文档如下所示:

{
    "categ": "categ_4", 
    "code": 200, 
    "date": "01/01/2017", 
    "host": "www.myhost.com", 
    "hour": "19", 
    "http_ver": "HTTP/1.1", 
    "idate": 20170101, 
    "length": 21, 
    "protocol": "https", 
    "remote_ip": "111.22.333.44", 
    "resp_time": 0, 
    "time": "19:53:15", 
    "url": "my_url", 
}

聚合时,我在 shell 中执行如下查询:

db.data.aggregate([{"$match": {"code":200}}, {"$group": {_id : "$code", total : {"$sum" : 1}}},{"$sort" : {_id: 1}}])

问题是计算需要很长时间。这太慢了。有什么办法可以加快这个操作吗? 我尝试在“代码”字段上创建索引但没有成功

db.data.createIndex({code:1})

我该怎么做才能使聚合更快?

谢谢

最佳答案

看来您的查询与

相同
db.data.count({"code":200})

您不需要为此进行聚合。尝试简单的计数(带索引)

关于mongodb 在巨大的数据集上聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527631/

相关文章:

mongodb - 在 MongoDB 中查找最大值

mongodb - 如何查找数组中的重复元素(一个文档)?

java - 通过 json 字符串查询 Spring Data MongoDB

node.js - 使用 MongoDB 4.0 查找函数返回匹配元素

node.js - 检索nodejs中的最后一个mongodb条目

mongodb - 转换到第二个嵌套数组中的 "filter"属性

mongodb - 水壶蒙戈_id

mongodb - 使用 mongoimport 将日期(ISODate)导入 MongoDB

python - 按小时聚合时返回日期对象

Node.js : How to return Object in Query Aggregation?