gpt4 book ai didi

node.js - 多次序列化查询

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:12 25 4
gpt4 key购买 nike

我正在尝试改进网站上的搜索,这就是它目前的样子(我使用 NodeJS、Sequelize 和 PostgreSQL):

db.food.findAll({
where: {
nameFood: {
$iLike: '%' + queryName + '%'
}
}
}).then(function (foods) {
foods.sort(compareFood);

res.json(foods);
}, function (e) {
res.status(500).send();
});

我认为这是非常不言自明的,但如果有不清楚的地方,请在评论中询问我。

现在,这个搜索算法考虑了整个参数,因此搜索“鸡蛋”不会返回任何内容,因为在我的数据库中它们被保存为“鸡蛋”。

我的快速改进想法是拆分查询以查找空格,然后查询每个关键字,例如:

var keywords = queryName.split(' ');

有了关键字,现在如何查询可变次数并将结果加入到要返回的数组中,就像食物中的数组一样?

我检查了这里的文档和一些问题,但找不到任何东西,非常感谢您的帮助,非常感谢。

最佳答案

您可以使用 $or 属性来查询任何与“eggs”或“chicken”匹配的内容。

这是一个例子:

// split queryName by spaces
var qry = queryName.split(' ');

// convert each item into a $iLike object
// ['chicken', 'eggs'] -> [{ $iLike: '%chicken%' }, { $iLike: '%eggs%' }]
qry = qry.map(function(item) {
return {
$iLike: '%' + item + '%';
};
});

db.food.findAll({
where: {
nameFood: { $or: qry }
}
}).then(function (foods) {
foods.sort(compareFood);

res.json(foods);
}).catch(function (e) {
res.status(500).send();
});

希望这能回答您的问题,但在您离开之前,我还为您提供了一个很好的提示,可能会对您有所帮助。

其中之一是使用 .catch 函数来接收任何错误。您可以让 .then 处理结果,用 .catch 处理错误,而不是同时使用 .then 处理结果和错误。

db.food.findAll()
.then(function(results) {

})
.catch(function(err) {

});

而不是

db.food.findAll()
.then(function(results) {

}, function(err) {

});

关于node.js - 多次序列化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com