多次序列化查询
Sequelize query multiple times
我正在尝试改进我网站上的搜索,这是它目前的样子(我使用 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();
});
我认为这是不言自明的,但如果有什么不清楚的地方,请在评论中问我。
现在,此搜索算法考虑了 WHOLE 参数,因此搜索 "chicken eggs" 将 return 没有任何结果,因为在我的数据库中它们被保存为 "eggs"。
我的快速改进想法是拆分查询以查找空格,然后查询每个关键字,例如:
var keywords = queryName.split(' ');
这样我就有了关键字,现在我如何查询可变次数并将结果加入一个数组中,以便像食品中的那样 returned?
我在这里查看了文档和一些问题,但找不到任何内容,非常感谢任何帮助,非常感谢。
您可以使用 $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) {
});
我正在尝试改进我网站上的搜索,这是它目前的样子(我使用 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();
});
我认为这是不言自明的,但如果有什么不清楚的地方,请在评论中问我。
现在,此搜索算法考虑了 WHOLE 参数,因此搜索 "chicken eggs" 将 return 没有任何结果,因为在我的数据库中它们被保存为 "eggs"。
我的快速改进想法是拆分查询以查找空格,然后查询每个关键字,例如:
var keywords = queryName.split(' ');
这样我就有了关键字,现在我如何查询可变次数并将结果加入一个数组中,以便像食品中的那样 returned?
我在这里查看了文档和一些问题,但找不到任何内容,非常感谢任何帮助,非常感谢。
您可以使用 $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) {
});