MongoDB 中怎么计算子查询

57次阅读
没有评论

共计 1950 个字符,预计需要花费 5 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章给大家介绍 MongoDB 中怎么计算子查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

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 中怎么计算子查询

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

A

1

=mongo_open(mongodb://localhost:27017/test?user=test password=test)

2

=mongo_shell(A1, orders.find(,{_id:0}) )

3

=mongo_shell@x(A1, employee.find({STATE: California},{_id:0}) ).fetch()

4

=A2.select(A3.(EID).sort().pos@b(SELLERID)).fetch()

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

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

关于 MongoDB 中怎么计算子查询就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1950字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)