nodejs+mongoose()连表查询

来源:互联网 发布:linux 内核参数 编辑:程序博客网 时间:2024/06/14 10:40

首先,我们定义三个Schema

复制代码
drawApply = new Schema({    salesId: { type: Schema.ObjectId, ref: 'sales' },    money: Number,    status: { type: Number, default: 0 },    createTime: { type: Date, default: Date.now }});sales = new Schema({    name: { type: String, required: true, unique: true },    pwd: String,    phone: String,    merchant: { type: Schema.ObjectId, ref: 'merchant' },    status: { type: Number, default: 0 }});merchant = new Schema({    name: String,    sname: String,    type: String});

  返回的结果中除了drawApply表的数据外,还会包含salesId中_id,name,phone,merchant四个属性的值(注:需要查看什么属性就在第二个参数中明示,若populate方法中只有salesId参数,则会将sales表中所有属性返回)。但是merchant属性的值是以ObjectId的形式显示的,如果想知道对应的merchant其它属性的值,则需要再次使用到嵌套的populate。代码如下:

复制代码
drawApply.find().populate({    path: 'salesId',    select: '_id name phone merchant',    model: 'sales',    populate: {        path: 'merchant',        select: '_id sname',        model: 'merchant'    }).sort({createTime: -1}).exec(function(err, list) {  // list of drawApplies with salesIds populated and merchant populated});
复制代码

  如果drawApply表中还存在其它ObjectId类型的字段,则可以在populate方法后面继续跟其它的populate,使用方法相同,如:

复制代码
drawApply.find().populate({    path: 'salesId',    select: '_id name phone merchant',    model: 'sales',    populate: {        path: 'merchant',        select: '_id sname',        model: 'merchant'    })    .populate('approver', 'name')    .populate('operator', 'name')    .sort({createTime: -1}).exec(function(err, list) {  // list of drawApplies with salesIds populated and merchant populated});


原创粉丝点击