我有一个称为“会话”的表
在表中,我有两个字段是复合索引:
我想计算一个特定应用程序中不同对象的数量。
我去的第一个方法是:
db.getCollection('sessions').distinct('udid', {"app" : ObjectId("...")}).length
我的问题是结果大于16mb,并且出现以下错误“差异太大,上限为16mb”
然后我尝试使用下一个解决方案:
db.getCollection('sessions').aggregate([
{$match: {app: ObjectId('...')}},
{$group:{_id: '$udid'}},
{$count: 'id'}
])
问题在于,它没有使用复合索引,而是首先找到所有的$ match,然后才执行该组,因此没有对索引进行分组。 这使得该查询在需要花费50秒的300万个文档架构中非常慢。
如果有人能告诉我另一种方法来进行计数的话,那就太好了。