我試圖複製在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')}
]
}
感謝
當名稱輸入爲姓名+名稱時,SQL查詢是否工作?當名稱之間有2個空格時它是否工作? –
@Alex Blex我只是這樣寫的,使其儘可能簡單,在我使用它的原始項目中,我還有另一個OR來覆蓋Surname + Name的情況。 – Nite
這裏更好的選擇是「拆分」字符串並將參數作爲不同的單詞發送到「$或」。正則表達式匹配或連接需要「完整集合掃描」,但提供「完全匹配」的條款不會,因此速度要快幾個數量級。你也應該正常化大小寫,或者如果你的MongoDB支持大小寫不敏感的索引。如果要將查詢響應時間降到最低,請避免使用不區分大小寫的正則表達式或計算表達式。 –