Không chỉ hành vi mong đợi mà được ghi lại hoàn toàn nhưng tôi cũng thấy khẳng định của bạn là sai. Trên một mẫu tiêu chuẩn có thể đáp ứng các điều kiện bạn chỉ định, kết quả sẽ như được hiển thị. Nhưng trước tiên, hãy tham khảo tài liệu:
Sau đó, kết quả giải thích của truy vấn hợp lệ:
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.mycollection",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"cid" : {
"$eq" : 2
}
},
{
"uid" : {
"$eq" : 1
}
},
{
"$text" : {
"$search" : "cat",
"$language" : ""
}
}
]
},
"winningPlan" : {
"stage" : "TEXT",
"indexPrefix" : {
"uid" : 1,
"cid" : 2
},
"indexName" : "uid_1_cid_1_content_text",
"parsedTextQuery" : {
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "trashbox",
"port" : 27017,
"version" : "3.0.0",
"gitVersion" : "a841fd6394365954886924a35076691b4d149168"
},
"ok" : 1
}
Vì vậy, nếu bạn muốn đưa ra các truy vấn có mẫu khác với "khóa ghép" mà bạn đã thực sự tạo và đáp ứng các quy tắc được chỉ định rõ ràng thì bạn cũng nên chú ý đến điểm chính:
Vì vậy, trong tổ hợp "bất kỳ dạng nào" hoặc khác, nếu bạn đang tìm kiếm nhiều hơn một định nghĩa về chỉ mục văn bản MongoDB thì bạn không thể làm điều đó. Điều tương tự cũng áp dụng cho các chỉ mục "không gian địa lý", cũng như xem xét chung rằng bên ngoài $or
hoặc một .sort()
công cụ truy vấn chỉ có thể chọn một chỉ mục tại một thời điểm.
Các phiên bản hiện đại sẽ báo cáo dòng rất cụ thể cùng với lỗi:
Vì vậy, "tất cả" các trường là bắt buộc và chúng "phải là" đối sánh chính xác mà không sử dụng toán tử bất đẳng thức.
Nếu bạn không định "luôn luôn" sử dụng các trường khác như một phần của truy vấn với các điều kiện "đối sánh chính xác" thì bạn không thể tạo chỉ mục kết hợp cùng với tìm kiếm văn bản.