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開頭的,那麼它不會使用索引。 –