2012-08-30 83 views
3

我试图做包含某个子项的搜索,但我没有得到任何结果返回(尽管我知道数据是正确的查询,包括大小写):如何使用MongoDB node.js驱动程序进行包含查询?

collection.find({name: "/.*" + keyword + ".*/"}).toArray(function(err, items) 

如果这不符合包含关键字的所有内容?它只是返回一个空对象。

我只是在ExpressJS应用程序中使用常规的MongoDB驱动程序。

+0

你只能通过物体进入的发现,而不是一个字符串。它应该是一个正则表达式,而不是一个强大的。 –

+0

好的。我实际上在我的代码中传递了一个对象,我只是键入了一个我在这里做的事情的简单例子。它已被修复。谢谢。 –

回答

4

您需要首先建立一个正则表达式应该尝试这样的:

var regex = RegExp("/.*" + keyword + ".*/") 

然后传中,变量查询。总的来说,我发现它更容易做的查询作为一个变量,并通过在:(始终建议,如果可能的性能)

var query = { FieldToSearch: new RegExp('^' + keyword) }; 
collection.find(query).toArray(...) 

我已经包括了正则表达式作为左扎根正则表达式来利用索引。有关详细看看这里:

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions

+0

看看顶部的例子。他们不建立RegExp对象。另外,我已经看到了胡萝卜现在被使用了几次。胡萝卜不是否定算子吗?我会认为^关键字会匹配不是关键字的所有内容。 –

+0

不,正则表达式中的^是行锚的开始,而不是否定,它基本上只是意味着它是否以“开头” –

+0

插入符仅在字符类内部否定:[^ aeiou] – davestewart

相关问题