Kesalahan aktual itu menunjukkan bahwa mongodb Anda adalah versi yang kurang dari 2.6 (jadi tidak ada pencarian teks dengan cara itu). Tapi Anda tetap tidak bisa melakukannya karena dua alasan.
-
Sebuah
$or
ekspresi hanya dapat memiliki satu ekspresi indeks khusus, berupa "teks" atau "geospasial" dalam argumen. -
Anda mengharapkan pencarian teks pada "dua" bidang yang berbeda dan Anda hanya dapat memiliki satu indeks teks per koleksi. Namun indeks tunggal itu dapat tersebar di beberapa bidang dalam dokumen. Tetapi Anda tidak dapat menanyakan istilah penelusuran yang berbeda untuk bidang yang berbeda.
Dokumentasi kutipan :
Dan itu juga harus mengatakan "Anda tidak dapat menggunakan $or
dengan $text
ekspresi atau $near
operator di mana keduanya digunakan dalam lebih dari satu kondisi." Tetapi informasi kecil itu hilang, tetapi Anda tetap tidak dapat melakukannya.
Sintaks Anda umumnya tidak benar, tetapi bahkan dengan sintaks yang benar dalam versi MongoDB yang didukung, Anda akan mendapatkan kesalahan saat mencoba menggunakan $or
seperti ini:
Error: error: {
"$err" : "Can't canonicalize query: BadValue Too many text expressions",
"code" : 17287
}
Jadi untuk mengatasi ini, Anda perlu:
-
Untuk memiliki server MongoDB versi 2.6 atau lebih tinggi yang mendukung
$text
sintaks (atau hidup dengan formulir perintah) -
Untuk hidup dengan pengindeksan di beberapa bidang dan menggunakan indeks tunggal.
-
Untuk menjalankan "kueri terpisah" sebagai pengganti kondisi "atau" Anda dan "menggabungkan" hasilnya di antarmuka API klien Anda.
Itulah satu-satunya cara Anda mendapatkan kondisi "atau" seperti ini dengan pencarian teks MongoDB.