Quá trình quét bộ sưu tập trong đầu ra giải thích của bạn đề cập đến map_levels
bộ sưu tập, như đã lưu ý trong queryPlanner.namespace
giá trị. $lookup
giai đoạn hợp nhất dữ liệu từ một bộ sưu tập khác vào đường dẫn hiện tại. Vì bạn chưa chỉ định bất kỳ giai đoạn truy vấn nào trước khi $lookup
, map_levels
bộ sưu tập sẽ được lặp lại bằng cách sử dụng quét bộ sưu tập. Nếu toàn bộ bộ sưu tập đang được tải mà không có bất kỳ tiêu chí lọc hoặc sắp xếp nào, thì việc quét bộ sưu tập sẽ ít tốn chi phí hơn so với việc lặp lại một chỉ mục và tìm nạp tài liệu.
Bạn có thể tránh quét bộ sưu tập hiện tại bằng cách thêm $match
trước khi $lookup
của bạn (giả sử bạn không muốn xử lý map_levels
đầy đủ bộ sưu tập).
Rất tiếc, đầu ra giải thích truy vấn không (như ở MongoDB 4.0) chỉ ra việc sử dụng chỉ mục cho $lookup
các giai đoạn. Một giải pháp cho vấn đề này sẽ được giải thích bằng cách sử dụng pipeline
trong tra cứu của bạn như một truy vấn tổng hợp cấp cao nhất.
Có một vấn đề liên quan cần xem / upvote trong trình theo dõi vấn đề MongoDB: SERVER-22622:Cải thiện $ lookup giải thích để chỉ ra kế hoạch truy vấn trên bộ sưu tập "từ" .