的MongoDB - 查找用户的姓名或姓或名+姓
问题描述:
我试图复制在MongoDB中此SQL查询:的MongoDB - 查找用户的姓名或姓或名+姓
SELECT * FROM users WHERE
name LIKE CONCAT('%', :search_txt, '%') OR
surname LIKE CONCAT('%', :search_txt, '%') OR
CONCAT(name, ' ', surname) LIKE CONCAT('%', :search_txt, '%')
到目前为止,我设法通过名字或姓氏,使用此代码搜索,但我可以“T弄清楚如何通过名称+姓还搜索
User.find(
{
"$or": [
{"name" : new RegExp(req.body.term, 'i')},
{"surname" : new RegExp(req.body.term, 'i')}
]
}
感谢
答
在这里你去:
User.aggregate({
$addFields: {
"fullname": {
$concat: [ "$name", ' ', "$surname" ]
}
}
}, {
$match: {
"$or": [
{"name": new RegExp(req.body.term, 'i')},
{"surname": new RegExp(req.body.term, 'i')},
{"fullname": new RegExp(req.body.term, 'i')}
]
}
当名称输入为姓名+名称时,SQL查询是否工作?当名称之间有2个空格时它是否工作? –
@Alex Blex我只是这样写的,使其尽可能简单,在我使用它的原始项目中,我还有另一个OR来覆盖Surname + Name的情况。 – Nite
这里更好的选择是“拆分”字符串并将参数作为不同的单词发送到“$或”。正则表达式匹配或连接需要“完整集合扫描”,但提供“完全匹配”的条款不会,因此速度要快几个数量级。你也应该正常化大小写,或者如果你的MongoDB支持大小写不敏感的索引。如果要将查询响应时间降到最低,请避免使用不区分大小写的正则表达式或计算表达式。 –