MongoDB:如何查找忽略大小写敏感、重音符号和百分比类似逻辑的文档 (%)

标签 mongodb mongoose mongodb-query case-insensitive querying

我想在我的 mongodb 数据库中搜索一个集合。在我的收藏中,我有字段“名称”的文档可以是以下值:

[i] “Palácio Guanabara”、“Palácio da Cidade”、“Festa Palácio”等

当用户键入“pala”或“palá”或“Pala”或“PalÁ”之类的搜索时,[i] 中的所有这些项都必须构建结果集。

我发现在 MongoDB 中我可以在搜索中使用正则表达式,例如:

{ "name": { $regex: new Regex(".*pala.*", "i") } }

好的,这种方法不区分大小写,并使用 SQL 中的百分比逻辑(“%pala%”)。但是,它不会忽略数据库中寄存器中的重音。

我找到了 $text 索引的另一种替代方法:https://docs.mongodb.org/manual/core/index-text/

这种方法可以忽略区分大小写和重音符号。但“搜索”不接受正则表达式,所以我无法搜索“%pala%”之类的内容。

总结一下,我想在MongoDB中做如下SQL查询:

select * from collection where remove_accents(upper(name)) like '%Pala%'

并且此查询返回名称为“palácio”、“palacio”、“PaláCiô”等的结果。

最佳答案

这对我有用!

只需用包含重音元音的正则表达式替换元音。另外可以使用 $options: 'i' 来避免区分大小写。

function diacriticSensitiveRegex(string = '') {
         return string.replace(/a/g, '[a,á,à,ä,â]')
            .replace(/e/g, '[e,é,ë,è]')
            .replace(/i/g, '[i,í,ï,ì]')
            .replace(/o/g, '[o,ó,ö,ò]')
            .replace(/u/g, '[u,ü,ú,ù]');
    }

find ({ name: { $regex: diacriticSensitiveRegex('pala'), $options: 'i' } });

关于MongoDB:如何查找忽略大小写敏感、重音符号和百分比类似逻辑的文档 (%),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36647244/

相关文章:

json - Apache spark 存储和查询 json 数据是一个很好的用例吗?

javascript - 使用带有索引变量的 $set 来更新文档

javascript - 操作 mongodb 查询中的列表

mongodb - 在 Lubuntu 上安装 MongoDb

node.js - 使用 Typescript 在 Mongoose 中链接 ES6 Promise

javascript - 异步 - 具有函数动态数组的 parallel()

mongodb - 图: "message": "ID cannot represent value: 5a72240cf31713598588b70f"

mongodb - 有没有办法获取mongodb中对象字段的长度?

node.js - Nodejs + Mongoose 的回调函数,如何只返回搜索值?

arrays - Mongodb 对聚合方面的两个相似数据数组进行分组和求和