我的集合上有一些索引如下:
(u'cdr3_len',1.0),
(u'v_gene.fam', 1.0),
(u'v_gene.gene', 1.0),
(u'd_gene.fam', 1.0),
(u'd_gene.gene', 1.0),
(u'j_gene.gene', 1.0),
(u'isotype', 1.0)
当我做一些简单的查询时 -
db.coll.find({'cdr3_len':20,'v_gene.fam':'IGHV3',
'd_gene.fam':'IGHD3',
'j_gene.full':'IGHJ6*03'},
limit=100).explain()['queryPlanner']['winningPlan']
它告诉我我正在使用IXSCAN。但是,当我在聚合管道中执行多个_id组时:
pipeline = [{$group:
{_id:{'cdr3_len':$cdr3_len,
'v_gene.fam':$v_gene.fam,
'd_gene.gene':$d_gene.gene,
'j_gene.full':$j_gene.full},
"count":{$sum:1}}}]
并运行说明,它告诉我我正在做一个完整的COLLSCAN。我不遵循为什么find的查询使用索引,以及聚合管道为什么要执行COLLSCAN。对于必须使用COLLSCAN的多id组语句,是否存在内在的东西?
由于