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

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/jaxu/p/5192721.html
Copyright © 2011-2022 走看看