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