Tôi không chắc đây có phải là lỗi trong MongoDB 2.6 hay không nhưng bạn có thể xem tại bài viết này về việc tạo chỉ mục.
Vì vậy, theo lời khuyên đó, bạn có thể thử với các chỉ mục này:
$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));
Chỉnh sửa:
Theo giải thích của bạn, nếu bạn đang thử nghiệm trên các tập dữ liệu nhỏ, việc thu thập đầy đủ sẽ nhanh chóng vì MongoDB không cần phải xem qua nhiều tài liệu. Bạn nên thử làm một bài kiểm tra với ví dụ:10000 tài liệu để thấy sự khác biệt thực sự. Giá trị cho các trường của bạn trong chỉ mục phải đủ khác nhau để đảm bảo tính chọn lọc chỉ mục cho các truy vấn của bạn (ví dụ:không phải tất cả các tài liệu đều từ cùng một chủ sở hữu).