Mongoose:boolean'或'带通配符的查询

时间:2012-08-29 07:30:19

标签: javascript node.js mongodb mongoose mongodb-query

我正试图用Mongoose对两个字段进行全文搜索。我一天中大部分时间都在测试几种查询类型,但我总是失败。 MongoDB shell查询就是这个:

db.feeds.item.find({lang:"en", $or:[{title: /searchexpression/}, {body: /searchexpression/}] })

在此示例中,我只想返回与标题正文字段或两个字段中的搜索表达式(包括正则表达式)匹配的英文文档。这个查询有效,但正如我所说的那样,问题在尝试使用 Mongoose 进行调整时开始: - (

我使用过但不起作用的一些表达方式:

exports.fullTextSearch = function(lang, text, callback) { 
    MyModel.find({lang:lang, $or: [{title:/text/},{body:/text/}]}).exec(callback);
    MyModel.find({lang:lang, $or: [{title: new RegExp('\/'+text+'\/')}, {body:new RegExp('\/'+text+'\/')}]}).exec(callback);
    MyModel.find({lang:lang}).or({title:/text/},{body:/text/}).exec(callback);
    MyModel.find({lang:lang}).or({title:new RegExp('\/'+text+'\/')},{body:new RegExp('\/'+text+'\/')}).exec(callback);    

}

非常感谢!

Luis Cappa。

1 个答案:

答案 0 :(得分:0)

尚未对此进行测试,但根据文档,这应该有效:

MyModel.find({lang:lang}).or([{title:/text/},{body:/text/}]).exec(callback);

与您的第三个示例类似,但在数组中使用“或”条件。

编辑:

要使正则表达式动态化,请使用第四个示例,但在数组中使用“或”条件:

MyModel.find({lang:lang}).or([{title:new RegExp(text)},{body:new RegExp(text)}]).exec(callback);

或者在外面定义正则表达式:

var regexText = new RegExp(text)
MyModel.find({lang:lang}).or([{title:regexText},{body:regexText}]).exec(callback);