Nejsem si jistý, zda se jedná o chybu v MongoDB 2.6, ale můžete se podívat na tento článek o vytváření indexu.
Takže podle této rady to můžete zkusit s těmito indexy:
$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));
Upravit:
Z vašeho vysvětlení vyplývá, že pokud testujete na malých souborech dat, úplný sběr je rychlý, protože MongoDB nepotřebuje procházet mnoho dokumentů. Měli byste zkusit udělat test např. s 10 000 dokumenty, abyste viděli skutečný rozdíl. Hodnoty pro vaše pole v indexech by se měly dostatečně lišit, aby byla zajištěna selektivita indexu pro vaše dotazy (např. ne všechny dokumenty jsou od stejného vlastníka).