Trước khi nói về các giải pháp khả thi, tôi chỉ muốn nêu rõ lý do tại sao MongoDB lại chọn để thực thi hạn chế này đối với việc lập chỉ mục các mảng song song. Khi bạn lập chỉ mục một mảng trong MongoDB, nó sẽ tạo một chỉ mục đa khóa với một khóa cho mỗi phần tử mảng. Do đó, nếu bạn tạo một chỉ mục kết hợp trên hai mảng, một mảng có M giá trị phân biệt và một mảng có N giá trị phân biệt, thì chỉ số này về cơ bản có các khóa MN. Điều này rất tệ - nó phi tuyến tính với số lượng phần tử mảng riêng biệt. Cân nhắc khối lượng công việc cần thiết để duy trì một chỉ mục như thế này khi bạn thêm hoặc xóa các phần tử mảng.
OK, biện minh sang một bên, để giải quyết hạn chế này, sẽ rất hữu ích nếu sử dụng phiên bản MongoDB hiện tại (2.6), hỗ trợ giao điểm chỉ mục. Người ta có thể tạo chỉ mục trên CustomerInformations
và VehicleLicenseDisks
và sau đó MongoDB có thể sử dụng cả hai chỉ số và cắt chúng để phục vụ các truy vấn có hạn chế trên cả hai.
Nếu vì bất cứ lý do gì, bạn bị mắc kẹt với MongoDB <2.6, thì các tùy chọn của bạn là xem xét thiết kế lại lược đồ hoặc phụ thuộc vào các chỉ mục sử dụng nhiều nhất một trong các trường mảng.