返回顶部
首页 > 资讯 > 数据库 >集算器协助MongoDB之表间关联
  • 136
分享到

集算器协助MongoDB之表间关联

2024-04-02 19:04:59 136人浏览 八月长安
摘要

    mongoDB不支持join,其官网上推荐的Unityjdbc可以把数据取出来进行二次计算实现join运算,但收费版才有这个功能。其他免费的jdbc drive只能支持最基本的s

    mongoDB不支持join,其官网上推荐的Unityjdbc可以把数据取出来进行二次计算实现join运算,但收费版才有这个功能。其他免费的jdbc drive只能支持最基本的sql语句,不支持join。如果用Java等编程语言将数据取出后实现join计算,也比较复杂。

    用免费的esProc配合MonGoDB,可以实现join计算。这里通过一个例子来说明一下具体作法。

MongoDB中的文档orders保存了订单数据,employee保存了员工数据。如下:

    MongoDB shell version: 2.6.4

connecting to: test

> db.orders.find();

{ "_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" }

> db.employee.find();

{ "_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 }

    Orders中的sellerid对应employee中的eid。需要查询出employee的state属性等于California的所有订单信息。其中orders数据量较大,不能一次装入内存。Employee数据量较小,Orders过滤之后的结果数据量也比较小。

查询条件表达式可以作为参数传递给esProc,如下图:

集算器协助MongoDB之表间关联

     esProc的程序代码如下:

集算器协助MongoDB之表间关联

    A1: 连接MongoDB数据库,ip和端口号是localhost:27017,数据库是test,用户名和密码都是test。


    A2: 使用find函数从MongoDB中取数,形成游标。集合是orders,过滤条件是空,指定键_id不取出。esProc在find函数中采用了和mongdb的find语句一样的参数格式。esProc的游标支持分批读取和处理数据,可以避免数据量过大,内存出现溢出的情况。


    A3: 取得employee中的数据。因为数据量不大,所以用fetch函数一次取出。


    A4: 使用switch函数,将游标A2中SELLERID字段的值,转换为A3(employee)中的记录引用。


    A5: 按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是传入参数。集算器将先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。这个例子中最终执行的是:=A4.select(SELLERID.STATE=="California")。由于SELLERID已经转化为employee的对应记录的引用,所以可以直接写SELLERID.STATE。过滤之后的结果数据量较小,所以一次取出。如果结果数据量仍然比较大的话,可以分批取出,比如每次取出10000条:fetch(10000)。


    A6:将过滤结果中的SELLERID重新切换为普通值。


A6的计算结果是:

集算器协助MongoDB之表间关联

过滤条件发生变化时不用改变程序,只需改变where参数即可。例如,条件变为:state等于California的订单,或者CLIENT等于PWQ的订单。Where的参数值可以写为:CLIENT=="PWQ"||SELLERID.STATE=="California"。

esProc并不包含MongoDB的java驱动包。用esProc来访问MongoDB,必须提前将MongoDB的java驱动包(esProc要求2.12.2或以上版本的驱动,mongo-java-driver-2.12.2.jar)放到[esProc安装目录]\common\jdbc中。

esProc协助MongoDB计算的脚本很容易集成到java中,只要增加一行A7,写成result A6即可向java输出resultset形式的结果,具体的代码参考esProc教程。同样,用java调用esProc访问MongoDB也必须将mongdb的java驱动包放到java程序的classpath中。


集算器esProc的下载地址:Http://www.raqsoft.cn/?p=2643 .

您可能感兴趣的文档:

--结束END--

本文标题: 集算器协助MongoDB之表间关联

本文链接: https://lsjlt.com/news/43386.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 集算器协助MongoDB之表间关联
        MongoDB不支持join,其官网上推荐的unityjdbc可以把数据取出来进行二次计算实现join运算,但收费版才有这个功能。其他免费的jdbc drive只能支持最基本的S...
    99+
    2024-04-02
  • 集算器协助MongoDB计算之子查询
    MongoDB不支持子查询,碰到这些复杂的运算就只能先将数据读出后再计算,而用Java等语言编写这类计算也不是很简单,这时可以考虑用集算器esProc辅助实现。下面我们通过一个例子来看一下具体做法。Mong...
    99+
    2024-04-02
  • 集算器协助MongoDB计算之交叉汇总
    MongoDB实现交叉汇总比较困难,如果将数据取出,用Java等高级语言来汇总的话,也相当复杂。因此,可以考虑用集算器esProc辅助MongoDB完成交叉汇总。下面我们通过一个例子来看一下具体做法。&nb...
    99+
    2024-04-02
  • 集算器协助MongoDB计算之数位比较
      Mongodb脚本解决复杂问题的计算能力有限,直接使用时较为吃力。很多情况下需要将数据读出后在主程序中进一步完成运算,而在Java等高级语言中编写这类集合式运算也比较麻烦。这时可以用集算器es...
    99+
    2024-04-02
  • 集算器协助MongoDB计算之本地化排序
    对于本地化语言(例如:中文),MongoDB是按照UNICODE编码排序,而不是根据本地语言的编码排序。用esProc结合MongoDB可以方便的实现本地化语言的排序(例如:中文按照拼音排序)。下面我们以中...
    99+
    2024-04-02
  • mongodb集合内文档之间怎么关联
    在MongoDB中,可以使用以下几种方式来关联集合内的文档:1. 嵌入文档:将一个集合内的文档嵌入到另一个集合内的文档中。例如,在一...
    99+
    2023-08-23
    mongodb
  • navicat怎么建立表之间关联
    在Navicat中,建立表之间的关联通常是通过外键来实现的。下面是一些简单的步骤来建立表之间的关联: 打开Navicat并连接到...
    99+
    2024-04-02
  • sql表与表之间怎么建立关联
    在 SQL 中,表与表之间可以通过外键建立关联。外键是一个表中的字段,它包含了另一个表的主键,从而建立了两个表之间的关联。 要建立表...
    99+
    2024-04-09
    sql
  • mysql中怎么建立表之间的关联
    在MySQL中,可以通过外键(foreign key)来建立表之间的关联关系。具体步骤如下: 创建第一个表(父表): CREAT...
    99+
    2024-04-02
  • 集算器协助java处理结构化文本的集合运算是怎样的
    今天就跟大家聊聊有关集算器协助java处理结构化文本的集合运算是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JAVA不直接支持集合运算,因此要用嵌套循环才能实现文本文件之间的...
    99+
    2023-06-17
  • MySQL如何进行表之间的关联更新
    在实际编程工作或运维实践中,对MySQL数据库表进行关联更新是一种比较常见的应用场景,比如在电商系统中,订单表里保存了商品名称的信息(冗余字段设计),但如果商品名称发生变化,则需要通过关联商品id,把新的商品名称更新到订单表中;或者,学...
    99+
    2023-09-21
    mysql 数据库
  • ASP、Unix、Git、编程和算法:这些技术之间有何关联?
    ASP、Unix、Git、编程和算法是当今计算机领域中非常重要的技术。它们之间的关联是什么呢?本文将会为大家一一解答。 ASP是一种面向Web应用程序开发的技术,它是由微软公司开发的。ASP技术使用VBScript、JavaScript等编...
    99+
    2023-11-08
    unix git 编程算法
  • 集算器怎么协助Java处理结构化文本实现条件过滤
    这篇文章主要讲解了“集算器怎么协助Java处理结构化文本实现条件过滤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“集算器怎么协助Java处理结构化文本实现条件过滤”吧!直接用Java实现文本...
    99+
    2023-06-17
  • 集算器怎么协助java处理结构化文本实现对齐连接
    这篇文章主要讲解了“集算器怎么协助java处理结构化文本实现对齐连接”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“集算器怎么协助java处理结构化文本实现对齐连接”吧!文本文件emp.txt...
    99+
    2023-06-17
  • 在SSL连接中客户端和服务器之间如何协商加密算法
    在SSL连接中,客户端和服务器之间会进行以下步骤来协商加密算法: 客户端发送一个"ClientHello"消...
    99+
    2024-04-17
    SSL证书
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作