Вы можете использовать текстовый поиск , создав текстовый индекс .
Допустим, у вас есть образец схемы продукта:
const mongoose = require("mongoose");
const productSchema = new mongoose.Schema({
name: String,
partner: String
});
const Product = mongoose.model("Product", productSchema);
module.exports = Product;
И эти документы в коллекции продуктов.
{
"_id" : ObjectId("5e67e98e41b119430816c779"),
"name" : "McDonald",
"partner" : "Burgerking"
},
{
"_id" : ObjectId("5e67e98241b119430816c778"),
"name" : "Samsung",
"partner" : "Google-LG"
},
{
"_id" : ObjectId("5e67e97541b119430816c777"),
"name" : "Apple",
"partner" : "Samsung-Sony"
}
Сначала мы создадим индекс по полям, которые мы хотим искать в коллекции продуктов, используя оболочку mongodb или gui, например MongoDB Atlas.
db.products.createIndex(
{
name: "text",
partner: "text"
}
)
Теперь мы можем искать по такому термину:
const Product = require("../models/product");
router.get("/products", async (req, res) => {
const result = await Product.find(
{ $text: { $search: req.query.term } },
{ score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } });
res.send(result);
});
Когда мы отправляем поисковый запрос в строке запроса так: http://.../products?term=Samsung
Результат будет таким:
[
{
"_id": "5e67e98241b119430816c778",
"name": "Samsung",
"partner": "Google-LG",
"__v": 0,
"score": 1.1
},
{
"_id": "5e67e97541b119430816c777",
"name": "Apple",
"partner": "Samsung-Sony",
"__v": 0,
"score": 0.75
}
]