我正在尝试使用 javascript 查询我的 MongoDB,但当我应该使用 $or
时,我似乎得到了一个结果。
我打算从前端接收一个字符串。我的逻辑是用空格分割
字符串,并搜索该字符串是否与数据库中的任何技能、位置和名称匹配。例如,如果用户搜索 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”搜索,我会得到
{
"_id":"2",
"skills ["PHP", "Javascript"],
"name":"Me"
}
而不是两个用户,因为两者的技能数组中都有 php
。请问这可能是什么问题以及如何解决这个问题。
最佳答案
为什么不在查询中使用 $regex
。
db.getCollection('tests').find({
$or: [{
name: {
$regex: /Me$/
}
}, {
skills: {
$regex: /PHP$/
}
}]
});
以上查询将为您提供所需的结果。
关于javascript - 使用 mongodb 进行搜索查询使用 $or 返回一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57525882/