Lỗi thực tế đó cho thấy mongodb của bạn là phiên bản nhỏ hơn 2.6 (vì vậy không có văn bản tìm kiếm theo cách đó). Nhưng dù sao thì bạn cũng không thể làm điều đó vì hai lý do.
-
Một
$or
biểu thức chỉ có thể có một biểu thức chỉ mục đặc biệt, là "văn bản" hoặc "không gian địa lý" trong các đối số. -
Bạn đang mong đợi tìm kiếm văn bản trên "hai" trường khác nhau và bạn chỉ có thể có một chỉ mục văn bản cho mỗi bộ sưu tập. Tuy nhiên, chỉ mục đơn lẻ đó có thể được trải rộng trên một số trường trong tài liệu. Nhưng bạn không thể hỏi các cụm từ tìm kiếm khác nhau cho các trường khác nhau.
Tài liệu trích dẫn :
Và nó cũng sẽ nói "Bạn không thể sử dụng $or
với $text
biểu thức hoặc $near
toán tử trong đó một trong hai được sử dụng trong nhiều điều kiện. " Nhưng thiếu một chút thông tin mà bạn vẫn không làm được.
Cú pháp của bạn nói chung không đúng, nhưng ngay cả với cú pháp đúng trong phiên bản MongoDB được hỗ trợ, bạn vẫn sẽ gặp lỗi khi cố sử dụng $or
như thế này:
Error: error: {
"$err" : "Can't canonicalize query: BadValue Too many text expressions",
"code" : 17287
}
Vì vậy, để giải quyết điều này, bạn cần:
-
Để có phiên bản máy chủ MongoDB 2.6 trở lên hỗ trợ
$text
cú pháp (hoặc trực tiếp với các biểu mẫu lệnh) -
Sống với việc lập chỉ mục trên nhiều trường và sử dụng một chỉ mục duy nhất.
-
Để thực hiện "các truy vấn riêng biệt" thay cho "hoặc" điều kiện của bạn và "kết hợp" các kết quả trong giao diện API ứng dụng khách của bạn.
Đó là cách duy nhất bạn nhận được các điều kiện "hoặc" như thế này với tìm kiếm văn bản MongoDB.