簡體   English   中英

貓鼬:帶通配符的布爾“或”查詢

[英]Mongoose: boolean 'or' query with wildcard

我試圖用貓鼬將全文搜索分為兩個領域。 我一天中大部分時間都在測試幾種查詢類型,但是我總是失敗。 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);    

}

非常感謝你!

路易斯·卡帕。

還沒有測試過,但是根據文檔,它應該可以工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM