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 相关文章推荐
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 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实现递归抓取网页类实例
2015/04/03 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
php计算税后工资的方法
2015/07/28 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
python查询sqlite数据表的方法
2015/05/08 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
pycharm安装及如何导入numpy
2020/04/03 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
工商学院毕业生个人自我评价
2013/09/19 职场文书
财务人员个人自荐信范文
2013/09/26 职场文书
校长岗位职责
2013/11/26 职场文书
校园之声广播稿
2014/01/31 职场文书
党性分析自查总结
2014/10/14 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
诚信高考倡议书
2019/06/24 职场文书
如何书写授权委托书?
2019/06/25 职场文书