explain() của bạn kết quả đầu ra gợi ý rằng:
-
Có 10962 đối tượng có
key.a : 456213154.db.collection.find({"key.a": 456213154})của bạn truy vấn đã sử dụng chỉ mục trênkey.avà trả lại 10962 đối tượng. -
Có 0 đối tượng trong bộ sưu tập của bạn có
key.a : 456213154và cókey.b : { $exists : true }.db.collection.find({"key": {"a": 456213154, "b": {"$exists":true}}})truy vấn đã sử dụng chỉ mục của bạn trên khóa.
Xem n giá trị cho mỗi truy vấn - đây là số được trả về; và cursor giá trị - đây là BtreeCursor nếu một chỉ mục được sử dụng. Trong trường hợp này, sẽ có lý tại sao truy vấn đầu tiên mất nhiều thời gian hơn, bởi vì nó có nhiều đối tượng hơn đáng kể để trả về.
Bạn có chắc chắn rằng các tài liệu có key.a : 456213154 giá trị cũng có key.b giá trị?
Chỉnh sửa:
Truy vấn với $exists param là cú pháp sai để kiểm tra sự tồn tại trong các tài liệu được nhúng.
Hãy thử db.collection.find({ "key.a" : 456213154, "key.b" : { "$exists" : true } }) .