数组中的MongoDB计数非常慢

数组中的MongoDB计数非常慢,mongodb,Mongodb,我的资料如下: { "timestamp":1467349392 , "alert_tag":[ "alert_source: WS2", "alert_severity:warning", "alert _object:Sensor-840", "alert_type_id:2", "alert_status:resovled" ], "alert_info":{ "t":1

我的资料如下:

{
   "timestamp":1467349392   ,
   "alert_tag":[  
      "alert_source: WS2",
      "alert_severity:warning",
      "alert 
    _object:Sensor-840",
      "alert_type_id:2",
      "alert_status:resovled"
   ],
   "alert_info":{  
      "t":1
   },
   "server_created_timestamp":NumberLong("1467349309392"),
   "alert_ 
    id":"20"
}
我收藏了大约两百万张唱片。我试图计算与查询匹配的唯一警报\u状态、警报\u对象、警报\u源的数量。以下是我的聚合管道(匹配、展开、组、排序、项目、组),大约需要40秒才能完成:

{  
   "$match":{  
      "alert_tag":{  
         "$in":[  
            "alert_status:pending"
         ]
      }
   }
},
{  
   "$unwind":"$alert_tag"
},
{  
   "$group":{  
      "_id":"$alert_tag",
      "count":{  
         "$sum":1
      }
   }
},
{  
   "$sort":{  
      "_id":1
   }
},
{  
   "$project":{  
      "tmp":{  
         "alert":"$_id",
         "count":"$count"
      }
   }
},
{  
   "$group":{  
      "_id":null,
      "total":{  
         "$sum":1
      },
      "data":{  
         "$addToSet":"$tmp"
      }
   }
}

如何提高性能<代码>警报标记已被索引

一个简单的
find().count()
查询需要多长时间(为什么这还不够)?因为我们想显示该期间所有可用的状态,所以不仅仅是“统计待处理警报状态的数量”?无论如何,count()需要多长时间?不,按类型、状态、对象和严重性进行计数。e、 g.告诉人们那里有什么类型的警报我认为可能需要很长时间的两个步骤是
放松
和第一个
。您能否分别尝试一下,看看执行的时间是否特别长?顺便说一句,你的
$in
匹配
阶段是无用的。一个简单的
查找().count()
查询需要多长时间(为什么这还不够)?因为我们想显示这段时间内所有可用的状态,所以它不仅仅是“统计待处理的警报状态的数量”?无论如何,count()需要多长时间?不,按类型、状态、对象和严重性进行计数。e、 g.告诉人们那里有什么类型的警报我认为可能需要很长时间的两个步骤是
放松
和第一个
。您能否分别尝试一下,看看执行的时间是否特别长?顺便说一句,你的
$in
匹配
阶段是无用的。