Schema屬性:如type、required、enum、lowercase、uppercase、trim、match等。
Scheme方法:如static、method、pre、set等。
這是今天手頭項目中遇到的一個問題,關于mongoose如何實現類似于SQL中 `nick` LIKE '%keyword%' or `email` LIKE '%keyword%' 這種多條件模糊搜索的問題。 查閱了mongoose文檔才得以實現,特此記錄一下。
主要用到了query.$or和query.$regex這兩個find參數。
query.$or用于實現多條件查詢,其值為一個數組。相關文檔
示例如下:
query.or([{ color: 'red' }, { status: 'emergency' }])1
query.$regex用于實現模糊查詢。相關文檔。使用示例如下:
{ : { $regex: /pattern/, $options: '' } }
{ : /pattern/ }1
通過以上兩個參數就可以實現多條件模糊查詢了。以User表為例,通過輸入一個關鍵字,來匹配昵稱或者郵箱與關鍵字相近的記錄.
代碼:
var keyword = this.params.keyword; //從URL中傳來的 keyword參數
var reg = new RegExp(keyword, 'i'); //不區分大小寫
var result = yield User.find(
{
$or : [ //多條件,數組
{nick : {$regex : reg}},
{email : {$regex : reg}}
]
},
{
password : 0
},
{
sort : { _id : -1 },
limit : 100
}
);