За да намерите чрез дума, всички продукти, които съществуват в колекцията, включват в полето за описание тази дума, имате нужда от съвпадение на регулярен израз с нечувствителност към главни и малки букви. Можете да използвате следната заявка (като пример):
db.product.find({"data.description": /test/i});
където i
в /test/i
показва нечувствителност към главни и малки букви, поради което регулярният израз съвпада в полето за описание за всеки текст с низа "test"
. Следва еквивалентният SQL израз:
select * from product where description like '%test%'
Така че бихте могли да използвате същото във вашето внедряване на маршрут, като използвате find()
метод за връщане на всички съответстващи документи вместо findOne()
който връща само един документ:
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);
});
});
Друг вариант е да използвате $textкод>
във вашата операция за намиране, тъй като извършва текстово търсене на съдържанието на полетата, индексирани с текстов индекс. Така че първото нещо, което бихте направили, е да създадете текстов индекс в полето за описание:
db.collection.createIndex( { "data.description": "text" } )
След това можете да правите заявки, като използвате оператора $text. Например следната заявка търси термина кафе:
db.collection.find( { $text: { $search: "coffee" } } )
РЕДАКТИРАНЕ :
При равни условия можете да актуализирате внедряването на маршрута си, за да използвате вместо това низове на заявки в URL адреса:
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);
});
});
което можете да направите заявка в браузъра си като http://localhost/description?q=product