共計 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 問一下細節