數(shù)據(jù)庫 Mongodb 不能通過元素值來查詢下標(biāo),在數(shù)組中實(shí)現(xiàn)排名次序,但可以利用集算器 SPL 語言來進(jìn)行輔助實(shí)現(xiàn)。若想了解更多,請前往乾學(xué)院:計(jì)算 mongodb 之?dāng)?shù)組查下標(biāo)! 排名在各行各業(yè)都比較流行,大到世界大學(xué)排名、福布斯富豪榜,小到班級學(xué)生成績排名、銀行按號排隊(duì)辦理業(yè)務(wù)等等。在數(shù)字化時(shí)代,通常數(shù)據(jù)庫都能比較方便地支持排名次序。不過,也并不是所有的數(shù)據(jù)庫都能如此,例如數(shù)據(jù)庫 Mongodb,它可以按照下標(biāo)查出內(nèi)嵌數(shù)組的元素,但是卻不能通過元素值來查詢下標(biāo),也就是不能知道元素的次序。如果在 MongoDB 數(shù)組中按照排名先后順序存放人員姓名,它可以做到根據(jù)排名(數(shù)組下標(biāo))來找姓名,但是不能通過姓名查找排名(數(shù)組下標(biāo)),也就是能夠知道排第幾名的是誰,卻不能知道某人排在第幾個(gè)位置。對于這種情況,我們可以利用集算器 SPL 語言來進(jìn)行輔助,完美實(shí)現(xiàn)數(shù)組查下標(biāo)的功能,下面用例子說明。 Mongodb 的集合 users 中,保存了姓名和朋友(數(shù)組)。朋友數(shù)組中的人名是按照排名順序保存的,樣例數(shù)據(jù)如下:
A1:連接 mongodb,ip 和端口號是 localhost:27017,數(shù)據(jù)庫是local,用戶名和密碼都是 test。如果需要其他參數(shù)的話可以按照 mongo://ip:port/db?arg=value&…格式設(shè)置參數(shù)。
簡言之,SPL 先通過條件獲取到排名的數(shù)據(jù),再用函數(shù) pos() 查出所給人員姓名的位置,使用非常容易,書寫也簡潔。 需要說明的是:集算器SPL并不包含mongodb的java驅(qū)動(dòng)包。如果要用SPL訪問mongodb,必須提前將mongodb的java驅(qū)動(dòng)包(例如:mongo-java-driver-3.9.1.jar)放到集算器設(shè)置的外部庫目錄extLib\MongoCli下。 除了在集算器中直接計(jì)算,上述使用SPL語言協(xié)助mongodb計(jì)算的腳本也很容易集成到java中,只要增加一行,寫成return A4即可向java輸出resultset形式的結(jié)果,具體的代碼參考SPL教程。同樣,用java調(diào)用SPL訪問mongodb也必須將mongdb的java驅(qū)動(dòng)包放到java程序的classpath中。 |
|