nodejs+mongodb aggregate级联查询操作示例


Posted in NodeJs onMarch 17, 2018

本文实例讲述了nodejs+mongodb aggregate级联查询操作。分享给大家供大家参考,具体如下:

最近完成了一个nodejs+mongoose的项目,碰到了mongodb的级联查询操作。情形是实现一个排行榜,查看某个公司(organization)下属客户中发表有效文ruan章wen最多的前十人。

Account表:公司的信息单独存在一个account表里。

var AccountSchema = new Schema({
  loginname: {type: String},
  password: {type: String},
  /**
   * 联系方式
   */
  //账户公司名
  comName: {type: String},
  //地址
  address: {type: String},
  //公司介绍
  intro: {type: String}
});
mongoose.model('Account', AccountSchema);

Cusomer表:公司的客户群。

var CustomerSchema = new Schema({
  /**
   * 基本信息
   */
  //密码
  password: {type: String},
  //归属于哪个Account
  belongToAccount: {type: ObjectId, ref: 'Account'},
  //手机号,登录用
  mobile: {type: String},
  //真实姓名
  realname: {type: String}
});
CustomerSchema.index({belongToAccount: 1, mobile: 1}, {unique: true});
mongoose.model('Customer', CustomerSchema);

article表

var articleSchema= new Schema({
  belongToAccount: {type: ObjectId, ref: 'Account'},
  title: {type: String},
  text: {type: String},
  createTime: {type: Date, default: Date.now},
  author: {type: ObjectId, ref: 'Customer'},
  //0,待确认,1 有效 ,-1 无效
  status: {type: Number, default: 0}
});
articleSchema.index({belongToAccount: 1, createTime:-1,author: 1}, {unique: false});
mongoose.model('article', articleSchema);

这里要做的就是,由accountId→aggregate整理软文并排序→级联author找到作者的姓名及其他信息。

代码如下:

exports.getRankList = function (accountid, callback) {
  AticleModel.aggregate(
    {$match: {belongToAccount: mongoose.Types.ObjectId(accountid), status: 1}},
    {$group: {_id: {customerId: "$author"}, number: {$sum: 1}}},
    {$sort: {number: -1}}).limit(10).exec(function (err, aggregateResult) {
    if(err){
      callback(err);
      return;
    }
      var ep = new EventProxy();
      ep.after('got_customer', aggregateResult.length, function (customerList) {
        callback(null, customerList);
      });
       aggregateResult.forEach(function (item) {
        Customer.findOne({_id: item._id.customerId}, ep.done(function (customer) {
          item.customerName = customer.realname;
          item.customerMobile=cusomer.mobile;
          // do someting
          ep.emit('got_customer', item);
        }));
      })
    });
};

返回的结果格式(这里仅有两条记录,实际为前十):

[ { _id: { customerId: 559a5b6f51a446602032fs21 }, number: 5,
customerName: 'test2',
mobile:22 } ,
{ _id: { customerId: 559a5b6f51a446602041ee6f }, number: 1,
customerName: 'test1',
mobile: 11 } ]

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
NodeJS制作爬虫全过程
Dec 22 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
Nodejs调用Dll模块的方法
Sep 17 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 #NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 #NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 #NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 #NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 #NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 #NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 #NodeJs
You might like
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
jQuery 白痴级入门教程
2009/11/11 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
Python-基础-入门 简介
2014/08/09 Python
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python 容器总结整理
2017/04/04 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
pytorch 共享参数的示例
2019/08/17 Python
PyQt5实现简单的计算器
2020/05/30 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
Django跨域请求原理及实现代码
2020/11/14 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
大家检讨书5000字
2014/02/03 职场文书
教师产假请假条范文
2014/04/10 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python