乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      計(jì)算 mongodb 之?dāng)?shù)組查下標(biāo)

       raqsoft 2020-02-10

            數(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ù)如下:
      > db.users.find({"name":"jim"})
      {
      "_id" : ObjectId("544f3bf8cdb02668db9ab229"), "name" : "jim", "friends" : ["tom", "jack", "luke", "rose", "james", "sam", "peter"]

      }

          mongodb查找指定排名的人名,例如查找 jim 的朋友當(dāng)中,排名第一的人名:
      > db. users.find({"name":"jim"},{"friends":{"$slice":[0,1]}})
      {
      "_id" : ObjectId("544f3bf8cdb02668db9ab229"), "name" : "jim", "friends" : ["tom"]
      }
             如果只用 MongoDB 的功能,我們無法查找 jim 的朋友當(dāng)中“l(fā)uke”的排名數(shù)值,不過使用了 SPL 語言后就可以輕松實(shí)現(xiàn)了。
            使用集算器 SPL 的代碼如下:


      A
      1=mongo_open("mongodb://localhost:27017/local?user=test&password=test")
      2=mongo_shell(A1,"users.find({name:'jim'},{name:1,friends:1,_id:0})")
      3=A2.fetch()
      4=A3.friends.pos("luke")
      5=mongo_close(A1)

             A1:連接 mongodb,ip 和端口號是 localhost:27017,數(shù)據(jù)庫是local,用戶名和密碼都是 test。如果需要其他參數(shù)的話可以按照 mongo://ip:port/db?arg=value&…格式設(shè)置參數(shù)。
             A2:使用 MongoDB 的 find 函數(shù)從集合 users 中取數(shù),形成游標(biāo)。過濾條件是 name=jim,指定鍵是 name 和 friends。SPL游標(biāo)能夠分批讀取和處理數(shù)據(jù),可以避免數(shù)據(jù)量過大,以防內(nèi)存溢出。
            A3:因?yàn)閿?shù)據(jù)量不大,所以這里可以直接 fetch 出游標(biāo)的所有記錄。
            A4:使用 pos 函數(shù),查出 luke 的位置。
            運(yùn)行的結(jié)果是:

      Value
      3

             簡言之,SPL 先通過條件獲取到排名的數(shù)據(jù),再用函數(shù) pos() 查出所給人員姓名的位置,使用非常容易,書寫也簡潔。

            需要說明的是:集算器SPL并不包含mongodbjava驅(qū)動(dòng)包。如果要用SPL訪問mongodb,必須提前將mongodbjava驅(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也必須將mongdbjava驅(qū)動(dòng)包放到java程序的classpath中。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多