我在nodejs中有这样的代码,它接收一个单词。:
exports.findProductsByWords = async (req, res) => {
let searchWords = req.body.searchWord; // Replace with your array of words
console.log("searchWords", searchWords);
try {
const producto = await Producto.find({
title: { $regex: searchWords, $options: "i" },
}).collation({ locale: "es", strength: 2 });
/* .populate({
path: "author",
select: "nombre direccion telefono email imagesAvatar",
}); */
console.log("el producto :" + producto);
res.status(200).json({ prodAll: producto });
} catch (error) {
console.log(error);
res.status(500).send("Hubo un Error");
}
};
我想从我的收藏收到Producto,所有的产品,有一个词'arnés',虽然我写在我的搜索字段'arnés'或'arnes'.
我确实认为我用整理达到了,但没有作品。在我的数据库中,这个词总是白色的arnés,但也许用户会输入“阿内斯”,我想工作。
一些想法?我用 Mongoose :在我的nodejs后端7.5.0。
谢谢
1条答案
按热度按时间92dk7w1h1#
一种选择是设置$text搜索索引。使用mongosh登录到您的数据库或使用compass连接并运行:
这将允许您对每个
product
的title
属性进行文本搜索,并且传递的值是'arnés'还是'阿内斯'都无关紧要,因为默认情况下,$diacriticSensitive
布尔选项设置为false。$diacriticSensitive布尔值。可选。一个布尔标志,用于启用或禁用对版本3文本索引的区分变音符号的搜索。假的,假的;即搜索服从文本索引的变音符号不敏感性。
现在你可以像这样运行
Model.find()
:如果你想让查询区分大小写,那么你需要传入
$caseSensitive
选项,并将其设置为true
,如下所示: