MongoDB在某些方面确实比关系型数据库更强 (比如对追加型日志数据的吞吐能力),但结构化计算能力方面较弱。比如:MongoDB不支持子查询,碰到这些复杂的运算就只能先将数据读出后再计算,而用Java等语言编写这类计算也不是很简单。

比如要处理这么个场景:查出订单信息,要求订单中的SELLERID必须是employee集合中STATE= California的员工id。如果写成sql就是:

Select * from orders where orders.sellerid in (select eid from employee where employee.state=’California’)。

orders的数据量较大无法一次取出,employee的数据量较小,最终结果的数据量也较小。部分数据如下:

MongoDB Collection orders:

{ "_id" : ObjectId("5434f88dd00ab5276493e270"), "ORDERID" : 1, "CLIENT" : "UJRNP

","SELLERID" : 17, "AMOUNT" : 392, "ORDERDATE" : "2008/11/2 15:28" }

{ "_id" : ObjectId("5434f88dd00ab5276493e271"), "ORDERID" : 2, "CLIENT" : "SJCH"

, "SELLERID" : 6, "AMOUNT" : 4802, "ORDERDATE" : "2008/11/9 15:28" }

{ "_id" : ObjectId("5434f88dd00ab5276493e272"), "ORDERID" : 3, "CLIENT" : "UJRNP

","SELLERID" : 16, "AMOUNT" : 13500, "ORDERDATE" : "2008/11/5 15:28" }

{ "_id" : ObjectId("5434f88dd00ab5276493e273"), "ORDERID" : 4, "CLIENT" : "PWQ",

"SELLERID" : 9, "AMOUNT" : 26100, "ORDERDATE" : "2008/11/8 15:28" }

MongoDB Collection employee:

{ "_id" : ObjectId("5437413513bdf2a4048f3480"), "EID" : 1, "NAME" : "Rebecca", "

SURNAME" : "Moore", "GENDER" : "F", "STATE" : "California", "BIRTHDAY" : "1974-1

1-20","HIREDATE" : "2005-03-11", "DEPT" : "R&D", "SALARY" : 7000 }

{ "_id" : ObjectId("5437413513bdf2a4048f3481"), "EID" : 2, "NAME" : "Ashley", "S

URNAME" : "Wilson", "GENDER" : "F", "STATE" : "New York", "BIRTHDAY" : "1980-07-

19","HIREDATE" : "2008-03-16", "DEPT" : "Finance", "SALARY" : 11000 }

{ "_id" : ObjectId("5437413513bdf2a4048f3482"), "EID" : 3, "NAME" : "Rachel", "S

URNAME" : "Johnson", "GENDER" : "F", "STATE" : "New Mexico", "BIRTHDAY" : "1970-

12-17","HIREDATE" : "2010-12-01", "DEPT" : "Sales", "SALARY" : 9000 }

计算结果:

如果有集算器的协助就简单多了,它是专门为结构化、半结构化数据计算设计的编程语言,查询、子查询、分组后过滤等等都有函数类库可以用,能够很好的弥补MongoDB在结构化方面计算能力的不足。比如上面问题,4行就搞定了:

其实还有很多情况用MongoDB处理结构化计算不太方便,但有集算器SPL的辅助却很简单,感兴趣可以参考:玩转Mongo计算、简化MongoDB关联运算、辅助MongoDB计算

集算器还很容易嵌入到Java应用程序中,Java如何调用SPL脚本有使用和获得它的方法。

关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器。

mongodb java 子查询_MongoDB 怎么计算子查询相关推荐

  1. mongodb java 更新数据_MongoDB JAVA API更新数据示例

    [java获得数据库信息常用API(DatabaseMetaData)示例] /** * MongoDBTest * MongoDB更新数据使用示例 */ package com.labci.mong ...

  2. 分页条件查询_mongodb多条件分页查询的三种方法

    自我推荐 一.使用limit和skip进行分页查询 public List<User> pageList(int pageNum ,int pageSize){List<User&g ...

  3. java mongodb 查询 游标_MongoDB find()方法:查询数据

    在关系型数据库中,可以实现基于表的各种各样的查询,以及通过投影来返回指定的列,相应的查询功能也可以在 MongoDB 中实现.同时由于 MongoDB 支持嵌套文档和数组,MongoDB 也可以实现基 ...

  4. php mongodb 子查询,MongoDB数组子查询elemMatch

    MongoDB数组子查询elemMatch 在 MongoDB数组子查询elemMatch详解 语法 db_name.collection_name.find({field:{$elemMatch:{ ...

  5. java mongodb 删除字段类型_Mongodb基本数据类型、常用命令之增加、更新、删除

    1.null---表示空值或者该字段不存在,如{"name":null} 2.布尔 --- 和java中的布尔一样,有两种:true,false,如{"sex" ...

  6. MongoDB JAVA Aggregate 管道聚合查询

    文章目录 开始 数据准备 表结构 原生SQL mongoTemplate Aggregation 的静态方法 新建 AggregationOperation mongoClient 开始 pom 配置 ...

  7. mongodb跨集合查询_MongoDB助力一个物流订单系统

    原创不易,相遇也不易,还请各位哥哥姐姐右上角把我设为星标,点赞 在看,养成习惯,回复bigsai获取pdf资源一份 课程导学 我们都知道MongoDB是一款非常出色的非关系型文档数据库,你肯定会想问M ...

  8. mongodb java查询_java操作mongoDB查询的实例详解

    java操作mongo查询的实例详解 前言: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库 ...

  9. mongodb java条件查询_java实现对mongodb,泛型封装增删查改、条件查询等操作

    本文实现一个通用泛型封装实现类,需要给定一个集合对象,类似mysql中与java对应的表:思想就是把给定的对象解析出所有非空字段,保存到一个BasicDBObject中,这里一定要保证java对象与m ...

最新文章

  1. 学Python很久只学了皮毛?
  2. 005-Python之列表,元组,字符串,bytes及bytearray共有操作
  3. ubuntu下编译pjsip
  4. 今日头条核心技术“个性推荐算法”揭秘
  5. STM32F412应用开发笔记之一:初识NUCLEO-F412ZG
  6. linux控制流程,Linux - Bash - 流程控制
  7. Python中如何创建元素为ndarray的list
  8. 大数据学习笔记59:初探Kafka消息系统
  9. SoPlus回顾 | 行业大咖论道AI,探讨未来行业发展趋势
  10. 中如何构造有参和无惨_导数中构造函数的神力你应该借助一下
  11. Luogu P2048 [NOI2010]超级钢琴
  12. 深度学习:Keras入门(二)之卷积神经网络(CNN)【转】
  13. 联想x3850x6重装系统,ibm x3850 x6安装系统,2015ibm服务器x3850x6
  14. python3视频教程哪个好_2020年5个经典python编程入门视频教程推荐学习
  15. 新能源电动汽车设计与生成
  16. 修复音频服务器,以上就是Win7系统如何修复音频服务未运行的具体方法
  17. 如何不用绿幕,从视频中移除背景?
  18. 电脑重装系统经验总结
  19. 一步步教你轻松学逻辑回归模型算法
  20. PAT 10341114(并查集)

热门文章

  1. 华为手机鸿蒙系统照片,华为:鸿蒙系统不是为智能手机设计的
  2. QNAP 安装nextcloud私有网盘
  3. 教你用Python写报表
  4. Java+SpringBoot+vue英语单词学习网站
  5. 未找到 Oracle 客户端和网络组件问题
  6. Ubuntu 打开PSD
  7. 目标检测 慎用旋转数据增强
  8. System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”
  9. LC100-A 全功能电感电容表串口接口
  10. 基于物联网(IOT)技术的智慧楼宇运营管理平台介绍