2012-04-14 308 views
5

我似乎无法在google上找到答案,也没有猫鼬网站,所以我在这里问。如果可能的话,我如何在文档中搜索部分匹配的字符串。查找匹配的部分字符串

例如:

在用户采集:

{ name: "Louis", location: "Paris, France" }, 
{ name: "Bill", location: "Paris, Illinoid" }, 
{ name: "Stephen", location: "Toronto, Ontario" } 

猫鼬功能:

searchForCity("Paris"); 

其结果将是从具有 “巴黎” 用户采集文档的列表中位置字符串。例如:

[ 
    { name: "Louis", location: "Paris, France" }, 
    { name: "Homer", location: "Paris, Illinois" } 
] 
+0

Hiya希望这有助于:http://www.mongodb.org/display/DOCS/Advanced+Queries寻找.find有一个很好的,欢呼! – 2012-04-14 19:52:06

回答

16

你可以使用一个regex

Query#regexQuery#$regex

指定$regex操作。

query.regex('name.first', /^a/i) 

因此,像这样:

User.where('location').$regex(/Paris/); 
User.where('location').$regex(/paris/i); // Case insensitive version 

请记住,正则表达式查询可以是非常昂贵的,因为MongoDB的必须针对每一单location运行正则表达式。如果你可以在开始处固定你的正则表达式:

User.where('location').$regex(/^Paris/); 

然后你可以索引位置,MongoDB将使用该索引。

+2

完美工作,不得不添加:var expression = new RegExp(word,“i”);, were word =“Paris”;这是我可以在其中包含变量。 – guiomie 2012-04-14 23:53:26

+0

有没有猫鼬解决方案? – chovy 2015-02-11 06:33:02

+0

@chovy嗯,答案*的哪一部分不是*猫鼬解决方案? – 2015-02-11 07:15:46