Untuk menemukan melalui sebuah kata, semua produk yang ada dalam koleksi termasuk dalam bidang deskripsi kata itu, Anda memerlukan pencocokan regex dengan case insensitivity. Anda dapat menggunakan kueri berikut (sebagai contoh):
db.product.find({"data.description": /test/i});
di mana i
di /test/i
menunjukkan ketidakpekaan huruf besar/kecil, sehingga ekspresi reguler cocok dengan bidang deskripsi untuk teks apa pun dengan string "test"
. Ekspresi SQL yang setara berikut ini:
select * from product where description like '%test%'
Jadi Anda dapat menggunakan hal yang sama dalam implementasi rute Anda, menggunakan find()
metode untuk mengembalikan semua dokumen yang cocok sebagai ganti findOne()
yang mengembalikan hanya satu dokumen:
app.get("/description/:id", auth, function(req, res, next) {
req.collection.find({
"data.description": /req.params.id/i
}, function(e, result) {
if(e) return next(e);
res.send(result);
});
});
Opsi lainnya adalah menggunakan $text
operator dalam operasi find Anda saat melakukan pencarian teks pada konten bidang yang diindeks dengan indeks teks. Jadi hal pertama yang akan Anda lakukan adalah membuat indeks teks pada kolom deskripsi:
db.collection.createIndex( { "data.description": "text" } )
Setelah itu Anda dapat melakukan kueri menggunakan operator $text. Misalnya, kueri berikut menelusuri istilah kopi:
db.collection.find( { $text: { $search: "coffee" } } )
EDIT :
Semua hal dianggap sama, Anda kemudian dapat memperbarui implementasi rute Anda untuk menggunakan string kueri di URL sebagai gantinya:
app.get("/description", auth, function(req, res, next) {
req.collection.find({
$text: { $search: req.params.q }
}, function(e, result) {
if(e) return next(e);
res.send(result);
});
});
yang dapat Anda kueri di browser Anda sebagai http://localhost/description?q=product