mongoose的使用

mongoose的一些高级用法:1 populate(中文:移民)的用法在mongodb中没有关联查询这一说,因此必须就要先设置好相关联的对象比如,我们在ZonePrice中就就先定义一个Zone对象var ZonePriceSchema = new mongoose.Schema({ zone:{type:ObjectId, ref:'Zone'}, time

mongoose的一些高级用法:

1 populate(中文:移民)的用法
在mongodb中没有关联查询这一说,因此必须就要先设置好相关联的对象
比如,我们在ZonePrice中就就先定义一个Zone对象

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

2 复杂查询
以下是一个复杂查询,基本包括了所有的查询用法

 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进行多字段匹配,但速度比较慢,大系统最好使用专业的搜索方法

or表示在数组里的条件满足一个即可,$regex表示一个正则表达式,匹配了key,同时,加入了$option的$i表示忽略大小写

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

关键字:mongodb, mongoose, options, populate