mongoose複雜查詢

mongoose的一些高級用法:正則表達式

1 populate(中文:移民)的用法
在mongodb中沒有關聯查詢這一說,所以必須就要先設置好相關聯的對象
好比,咱們在ZonePrice中就就先定義一個Zone對象mongodb

var ZonePriceSchema = new mongoose.Schema({
    
    zone:{type:ObjectId, ref:'Zone'},
    time: String,      //時間
    price: Number,       //價格
    district:String,   //區域
})

然後使用populate把相關聯的zone查詢出來數組

ZonePrice.find({})
         .populate({ 
            path:'zone',
            match:{priceRate:{$gt:0}},
            options:{ limit:pageSize,
            skip:(pageNum-1)*pageSize }
})

固然,mongoose也是支持內嵌數組對象的
你能夠把他定義爲mongoose

someSchema({
...
ofObjectId: [Schema.Types.ObjectId],
...
})

2 複雜查詢
如下是一個複雜查詢,基本包括了全部的查詢用法code

Person
      .find({ occupation: /host/ }) 
      .where('name.last').equals('Ghost')   // Person.name.last是Ghost
      .where('age').gt(17).lt(66)  // 17 < Person.age <66
      .where('likes').in(['vaporizing', 'talking'])//likes是vaporizing或者talking
      .limit(10)  //限制10條記錄
      .sort('-occupation')  //根據occupation的倒序排
      .select('name occupation') //選擇name和occupation字段
      .exec(callback);

3 模糊匹配對象

有時候在項目中須要搜索功能,而搜索功能的實現必須用模糊匹配,這個時候能夠使用or進行多字段匹配,但速度比較慢,大系統最好使用專業的搜索方法ip

or表示在數組裏的條件知足一個便可,$regex表示一個正則表達式,匹配了key,同時,加入了$option的$i表示忽略大小寫ci

Job.find({
        $or: [
          {'description': {'$regex': key, $options: '$i'}},
          {'city': {'$regex': key, $options: '$i'}},
          {'name': {'$regex': key, $options: '$i'}}]
      })
      .populate('JobType', 'name')
      .exec(function (err, jobs) {
        if (err) {
          callback(err);
        } else {
          callback(null, jobs);
        }
      })
相關文章
相關標籤/搜索