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与Mysql的交互示例代码
Aug 18 NodeJs
基于NodeJS的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 NodeJs
node快速搭建后台的实现步骤
Feb 18 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
域名查询代码公布
2006/10/09 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
解读! Python在人工智能中的作用
2017/11/14 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
财务管理专业推荐信
2013/11/19 职场文书
学期自我评价
2014/01/27 职场文书
九年级政治教学反思
2014/02/06 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
保安辞职信范文
2015/02/28 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
python代码实现扫码关注公众号登录的实战
2021/11/01 Python