【问题标题】:How do I search for queries without case sensitivity in Mongoose?如何在 Mongoose 中搜索不区分大小写的查询?
【发布时间】:2023-04-07 04:30:01
【问题描述】:

如何在 MongoDB 中搜索查询(使用 mongoose 库)而不区分大小写?

假设我有一个包含Adam 字符串数据的查询。该查询区分大小写,因此以adam 搜索该查询将返回空值。

我尝试使用正则表达式,并禁用区分大小写。它完成了这项工作,但现在每当我搜索 ad 时,它都会找到并返回 Adam,这是我不想要的。

如何以正确的方式搜索不区分大小写的查询? 谢谢!

这是我查找不区分大小写但存在正则表达式错误的查询的代码。

server.get('/test/:username', (req, res)=> {
    const username = req.params.username

    usersDB.findOne({'username': {'$regex': username, $options: '?-i'}}, (err, data)=> {
        if(err) {
            throw err
        } 

        if(!data) {
            console.log('user not found')
            res.redirect('/')
        } else if(data) {
            console.log('user found: ' + data.username)
            res.redirect('/')
        }
    })
})

【问题讨论】:

  • 这能回答你的问题吗? Case insensitive search in Mongo
  • 嘿@sidgate!我真的很感谢你发送那个,不幸的是,没有。我尝试了所有这些响应,而不是修复搜索错误,它只是返回一个空值。
  • 您需要使用正确的正则表达式 '^string$' 来标记字符串的开始和结束。或者使用$toLower 并匹配小写字符串。
  • 对不起,我不太明白你想说什么。你是在告诉我让它usersDB.findOne({'username': {'$regex': '^string$', $options: 'i'}}usersDB.findOne({'username': {'$regex': '^username$', $options: 'i'}} 因为两者都不起作用。非常感谢您帮助我!

标签: node.js mongodb mongoose


【解决方案1】:

您应该将$options 属性设置为i 值,而不是?-i

{'username': {'$regex': `^${username}$`, $options: 'i'}}

下面是工作示例:https://mongoplayground.net/p/wq0hfAnodmL

【讨论】:

  • 不,这不会改变任何事情。
  • 尝试 console.log(req.params.username) 看看你是否得到了有效的值。我在答案中添加了工作示例。
  • 是的,控制台记录了正确的值。 ada 仍然输出 Adam & 控制台日志输出 ada
  • 对不起,我没有意识到你不想要部分匹配。我再次更新了我的答案。现在可以试试了吗?
猜你喜欢
  • 1970-01-01
  • 2023-01-31
  • 2019-03-15
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多