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服务器(7):阻塞操作的实现
Dec 18 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
javascript实现留言板功能
2020/02/08 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
使用Python脚本操作MongoDB的教程
2015/04/16 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
python调用摄像头拍摄数据集
2019/06/01 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
初中作文评语大全
2014/04/23 职场文书
廉洁教育学习材料
2014/05/19 职场文书
服务员岗位职责范本
2015/04/09 职场文书