來源:https://groups.google.com/forum/#!msg/mongodb-user/HqzXSh5DZek/ffZG0TQ1w8cJ。mongodb
【摘要】shell
MongoDB 對於 List 結構中由若干字段組合而成的字符串數據有統計需求時,使用其 shell 腳原本實現有些複雜,而集算器 SPL 語言,則因擁有豐富的接口函數,實現就容易多了。若想了解更多,請前往乾學院:查詢 MongoDB 子文檔的 List 字段!函數
在 Mongodb 應用中,常常會在 List 結構中存入由若干字段組合而成的字符串數據。這種方式對於 Mongodb 的管理比較方便,如大量導入導出數據時,不用關注數據與字段的對齊問題,導入導出數據也比較快。不過,事物的特性每每存在兩方面,有利有弊,這種方式在遇到統計計算需求時,就須要將字符串進行拆分,同時轉換數據類型,再進行數據計算。這時用 mongodb shell 操做就比較麻煩了,而集算器 SPL 語言擁有豐富的接口函數,實現就容易多了。如今咱們經過樣例來看看如何實現。google
Collction Cbettwen含有多級子文檔,其中 dataList 是 List 型,含有多個字符串,每一個字符串由多個數字組成。須要找出符合以下條件的字符串:第 1 個數字大於 6154 並小於等於6155。url
Cbettwen的某個文檔以下:.net
符合要求的字符串爲:"6154.5,37.9,1.529,1.429,1.429","6155,30.4,1.505,1.532,1.543"。blog
集算器代碼:接口
A1:鏈接MongoDB,鏈接字格式爲mongo://ip:port/db?arg=value&…。ip
A2:使用find函數從MongoDB中取數,造成遊標。collection是Cbettwen,過濾條件是空,取出_id以外的全部字段。內存
A3:找到符合條件的字符串。函數conj可對A2中每一個文檔的計算結果進行合併,~表示上級序表的每一個成員。函數new可新建序表。#1表示序表的第1個字段。函數split可將字符串拆爲序列,默認分隔符是逗號,@1表示只拆成兩個成員,遇到第1個分隔符就返回。s表示將首個字符串轉換成float類型的數值,而後進行比較篩選。
A4: 對遊標進行批處理,得到內存數據,結果以下:
A5:關閉mongodb鏈接。
能夠看見,SPL語言的實現相對mongodb來講,更加精簡容易。