【发布时间】:2019-12-22 20:26:46
【问题描述】:
我正在尝试使用 javascript 查询我的 MongoDB,但是当我应该使用 $or 时,我似乎得到了一个结果。
我打算从前端接收一个字符串。我的逻辑是通过空格split 字符串并搜索字符串是否与数据库中的任何技能、位置和名称匹配。例如,如果用户搜索 PHP,它应该将所有具有 PHP 的用户作为一项技能,即使该用户具有其他技能。下面是代码
数据
{
"_id":"1",
"skills": ["PHP"],
"name":"You"
}
{
"_id":"2",
"skills": ["PHP", "Javascript"],
"name":"Me"
}
代码
exports.search = async (req, res, next) => {
try {
const escapeChar = escapeString(req.body.query);
const searchQueries = escapeChar.split(' ');
let result;
for (let i in searchQueries) {
const ret = async () => {
const pattern = new RegExp(searchQueries[i], 'gi');
const user = await User.find({
$or: [{ name: pattern }, { skills: pattern }],
});
return user;
};
result = await ret();
}
if (result.length > 0) {
return res.json(sendResponse(httpStatus.OK, 'User found', result));
}
return res.json(sendResponse(httpStatus.NOT_FOUND, 'User not found'));
} catch (error) {
next(error);
}
};
假设我搜索PHP,我应该得到两个用户。这行得通。
但如果我用“PHP me”搜索,我会得到 p>
{
"_id":"2",
"skills ["PHP", "Javascript"],
"name":"Me"
}
而不是两个用户,因为他们的技能数组中都有php。请问,可能是什么问题,我该如何解决。
【问题讨论】:
标签: javascript regex express mongoose