共计 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 在结构化方面计算能力的不足。比如上面问题,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 问一下细节