zoukankan      html  css  js  c++  java
  • 在Mongoose中使用嵌套的populate处理数据

      假设有如下mongodb的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属性指定表sales的_id,表sales的属性merchant指定表merchant的_id。这是一种嵌套级联的关系。

      查找drawApply表的数据,并同时返回对应的sales表的数据,可以使用下面的方法:

    drawApply.find().populate('salesId', '_id name phone merchant').sort({createTime: -1}).exec(function(err, list) {
      // list of drawApplies with salesIds populated
    });

      返回的结果中除了drawApply表的数据外,还会包含salesId中_id,name,phone,merchant四个属性的值。但是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 });

      有关populate的具体用法可以参考mongoose的官方文档http://mongoosejs.com/docs/populate.html#deep-populate

  • 相关阅读:
    We7很给力
    用Windows Media Player截图的方法
    控制IMG图片的大小缩放
    ASP.NET 2.0轻松搞定统计图表(二)
    VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法
    db2表名大小写问题
    来自Rails世界的项目管理工具Redmine
    Downloading C# ActiveX Components through CAB File(转)
    windows下借助InstantRails环境搭建redmine(转)
    JavaScript获取系统当前日期和时间、星期几
  • 原文地址:https://www.cnblogs.com/jaxu/p/5192721.html
Copyright © 2011-2022 走看看