1
我有一个超过100百万个文档的mongodb数据库。我想做聚合,所以我可以给文件统计。 我的文档的样子:庞大的数据集上的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",
}
汇总时
,我在外壳进行这样的查询:
db.data.aggregate([{"$match": {"code":200}}, {"$group": {_id : "$code", total : {"$sum" : 1}}},{"$sort" : {_id: 1}}])
的问题是,它需要很长的时间来计算。这太慢了。有什么办法可以加快这个操作吗? 我tryed创建的“代码”字段,但没有成功
db.data.createIndex({code:1})
我能做些什么,使聚集更快指数?
谢谢
我的查询是错误的(我不得不删除“$匹配”部分)。我想得到的是这样的: 'db.data.aggregate([{“$ group”:{_id:“$ code”,total:{“$ sum”:1}}},{“$排序“:{total:1}}]) {”_id“:404,”total“:11729} {”_id“:302,”total“:56068} {”_id“:410,总”:579872} { “_id”:304, “总”:8201025} { “_id”:301, “总”:1639247} { “_id”:200, “总”:82234244} ' –
“尝试简单计数(** with index **)”是什么意思,是否有一种将索引添加到mongodb的有效方法?正如我上面所说的,我尝试了createIndex函数,但它似乎不影响聚合的工作方式。我不知道索引如何与mongodb协同工作,对吗? –
@DanyM如果find/count/$ match查询可以使用索引,则使用它们而不是扫描集合中的每个文档(参见[索引手册](https://docs.mongodb.com/manual/indexes/)) 。如果您的聚合查询不是以$ match step开头的,那么它不会使用索引。 –