我正在开发我们的应用程序的仪表板,我想知道MongoDB对于某些查询聚合查询是否如此缓慢是正常的。我粘贴在我们的一个查询的简化版本下面:
db.data_items.aggregate([
{'$match':
{
'organization_subscription_waves.wave_id':ObjectId('5617fe6abecf0500f9c6e125')
},
{'$group':
{'_id': '$data_type_value_type', 'count': {'$sum': 1}}
}
])
结果如下:
{ "_id" : "PHOTO", "count" : 76 }
{ "_id" : "MULTI_SELECT", "count" : 1607 }
{ "_id" : "TIME", "count" : 659 }
{ "_id" : "MULTIPLE_CHOICE", "count" : 78321 }
{ "_id" : "DATE", "count" : 649 }
{ "_id" : "NUMBER", "count" : 2679 }
花了两分多钟,我相信这么简单的聚合太长了。我想知道我能做些什么来提高查询效率,或者我是否必须进行一些离线优化来提高性能。
其中,我在集合上有这个索引:
{
"v" : 1,
"name" : "organization_subscription_waves.wave_id_1",
"key" : {
"organization_subscription_waves.wave_id" : 1
},
"ns" : "gigwalk_apps_1.data_items"
},
但我不确定它是否被使用。解释有以下输出:
{
"stages" : [
{
"$cursor" : {
"query" : {
"organization_subscription_waves.wave_id" : ObjectId("5617fe6abecf0500f9c6e125")
},
"fields" : {
"data_type_value_type" : 1,
"_id" : 0
},
"plan" : {
"cursor" : "BtreeCursor ",
"isMultiKey" : false,
"scanAndOrder" : false,
"indexBounds" : {
"organization_subscription_waves.wave_id" : [
[
ObjectId("5617fe6abecf0500f9c6e125"),
ObjectId("5617fe6abecf0500f9c6e125")
]
]
},
"allPlans" : [
{
"cursor" : "BtreeCursor ",
"isMultiKey" : false,
"scanAndOrder" : false,
"indexBounds" : {
"organization_subscription_waves.wave_id" : [
[
ObjectId("5617fe6abecf0500f9c6e125"),
ObjectId("5617fe6abecf0500f9c6e125")
]
]
}
}
]
}
}
},
{
"$group" : {
"_id" : "$data_type_value_type",
"count" : {
"$sum" : {
"$const" : 1
}
}
}
}
],
"ok" : 1
}