2017-01-02 94 views
0

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

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

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

+0

你用来搜索的正则表达式是什么? – str

+0

str是一个名字“John Test” – JMA

+0

'str'应该是一个正则表达式,而不是实际的字符串。 MongoDB使用Perl兼容的正则表达式。请参考http://perldoc.perl.org/perlre.html创建满足您需求的正则表达式 – RaR

回答

1

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

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

,那么你可以搜索使用$text$search

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

对于这个查询,你会得到,如果name包含约翰测试这是不区分大小写

+0

我试过了。没有错误。我搜索后没有显示任何列表。 – JMA

+0

你是否创建了'文本索引',并且可以显示你已经尝试过的代码? @JohnArellano –

0

我必须为我的项目做到这一点,这是如何工作的? {"name":new RegExp('^'+name, 'i')}您可能需要编码字符串第一str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

+0

您首先对字符串进行编码的含义是什么? – JMA

+0

@JohnArellano转义正则表达式字符,否则用'*'或'.'等正则表达符输入将被解析为正则表达式。 – ECMAScript

0

试试这个

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

我已经对类似问题here作出了回应,结合文本inde x和正则表达式模式使它很好地工作。请注意,文本索引正在按条款进行搜索,因此如果您尝试通过提供pad来搜索padavan,则无法获得您期望的只有text索引。

相关问题