【问题标题】:How to search full or partial match with first name and last name in mongodb如何在mongodb中搜索名字和姓氏的全部或部分匹配
【发布时间】:2017-01-02 09:29:29
【问题描述】:

如何在mongodb中搜索名字和姓氏的全部或部分匹配? 我试过用这个,

{"name":{ $regex: str, $options: 'i'}}

但它仅适用于字符串的完全匹配。 我可以使用正则表达式进行部分匹配吗?

【问题讨论】:

  • 你搜索的正则表达式是什么?
  • str 是一个名字“John Test”
  • str 应该是正则表达式,而不是实际的字符串。 MongoDB 使用 Perl 兼容的正则表达式。请参考perldoc.perl.org/perlre.html 创建满足您需求的正则表达式

标签: node.js mongodb meteor


【解决方案1】:

对于这种类型的搜索最好创建文本索引。 mongo shell 命令为名称字段创建text index

db.colectionName.createIndex( { name: "text" } );

然后您可以使用$text$search 进行搜索

var text = 'John Test''
db.collectionName.find({ $text: { $search: text  } });

对于这个查询,如果 name 包含 johntest 并且这是 不区分大小写的

【讨论】:

  • 我试过这个。没有错误。我搜索后没有显示列表。
  • 您创建了text index 并且可以展示您尝试过的代码吗? @JohnArellano
【解决方案2】:

我必须为我的项目执行此操作,这对您有何帮助? {"name":new RegExp('^'+name, 'i')}你可能需要先对字符串进行编码str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

【讨论】:

  • @JohnArellano 转义正则表达式字符,否则输入的正则表达式符号如*. 将被解析为正则表达式。
【解决方案3】:

试试这个

{'name': {'$regex': '.*str.*', $options: 'i'}}

【讨论】:

    【解决方案4】:

    我已经回复了类似的问题here,结合文本索引和正则表达式模式使它工作得很好。请注意,文本索引是按字词搜索的,因此如果您尝试通过提供 pad 来搜索 padavan,您将不会得到您所期望的只有 text 索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多