[英]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.