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