Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose:带通配符的布尔或查询_Javascript_Node.js_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

Javascript Mongoose:带通配符的布尔或查询

Javascript Mongoose:带通配符的布尔或查询,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我正试图用猫鼬将全文搜索分为两个字段。我花了一天的大部分时间测试了几种查询类型,但总是失败。MongoDB shell查询如下: db.feeds.item.find({lang:"en", $or:[{title: /searchexpression/}, {body: /searchexpression/}] }) 在本例中,我只想返回与搜索表达式匹配的英文文档,包括标题或正文字段或两个字段中的正则表达式。这个查询是有效的,但正如我所说的,当试图用猫鼬来适应它时,问题开始了:- 我使用了一

我正试图用猫鼬将全文搜索分为两个字段。我花了一天的大部分时间测试了几种查询类型,但总是失败。MongoDB shell查询如下:

db.feeds.item.find({lang:"en", $or:[{title: /searchexpression/}, {body: /searchexpression/}] })
在本例中,我只想返回与搜索表达式匹配的英文文档,包括标题或正文字段或两个字段中的正则表达式。这个查询是有效的,但正如我所说的,当试图用猫鼬来适应它时,问题开始了:-

我使用了一些不起作用的表达:

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.

尚未对此进行测试,但根据文档,这应该是可行的:

MyModel.find({lang:lang}).or([{title:/text/},{body:/text/}]).exec(callback);
和第三个示例类似,但在数组中使用or条件

编辑:

要使regex动态,请使用第四个示例,但使用数组中的or条件:

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);

我曾经尝试过同样的查询,但没有成功。我再次复制粘贴了您建议的内容,但什么也没有:—我开始认为这可能是猫鼬的错误……我简化了查询,将搜索结果简化为一个字段,如:MyModel.find{lang:lang,title:new RegExp'\/'+text+'\/'}.execcallback;它可能是一个与正则表达式相关的猫鼬bug,甚至是一个没有文档记录的查询组件。没有bug!问题与搜索表达式本身有关。执行搜索的搜索表达式来自HTTP请求参数,因此可能一些解码或特殊字符转义问题与没有结果有关。然而,这很奇怪,因为打印搜索表达式时看起来还可以。我会继续测试。非常感谢你抽出时间,拉格纳!好的,html编码可能会导致问题。