Nie jestem pewien, czy jest to błąd w MongoDB 2.6, ale możesz rzucić okiem na ten artykuł o tworzeniu indeksu.
Postępując zgodnie z tą radą, możesz spróbować z następującymi indeksami:
$col->ensureIndex(array('owner' => 1, 'ca' => -1));
$col->ensureIndex(array('ca' => -1, 'owner' => 1, 'perm.type' => 1));
$col->ensureIndex(array('perm.list' => 1, 'ca' => -1, 'owner' => 1));
Edytuj:
Z twojego wyjaśnienia, jeśli testujesz na małych zestawach danych, pełne zbieranie jest szybkie, ponieważ MongoDB nie musi przechodzić przez wiele dokumentów. Powinieneś spróbować zrobić test z np. 10000 dokumentami, aby zobaczyć prawdziwą różnicę. Wartości pól w indeksach powinny być wystarczająco różne, aby zapewnić selektywność indeksu dla zapytań (np. nie wszystkie dokumenty pochodzą od tego samego właściciela).