查询 MongoDB 子文档的 List 字段

来源:https://groups.google.com/forum/#!msg/mongodb-user/HqzXSh5DZek/ffZG0TQ1w8cJmongodb

【摘要】shell

        MongoDB 对于 List 结构中由若干字段组合而成的字符串数据有统计需求时,使用其 shell 脚原本实现有些复杂,而集算器 SPL 语言,则因拥有丰富的接口函数,实现就容易多了。若想了解更多,请前往乾学院:查询 MongoDB 子文档的 List 字段!函数

      在 Mongodb 应用中,常常会在 List 结构中存入由若干字段组合而成的字符串数据。这种方式对于 Mongodb 的管理比较方便,如大量导入导出数据时,不用关注数据与字段的对齐问题,导入导出数据也比较快。不过,事物的特性每每存在两方面,有利有弊,这种方式在遇到统计计算需求时,就须要将字符串进行拆分,同时转换数据类型,再进行数据计算。这时用 mongodb shell 操做就比较麻烦了,而集算器 SPL 语言拥有丰富的接口函数,实现就容易多了。如今咱们经过样例来看看如何实现。google

      Collction Cbettwen含有多级子文档,其中 dataList 是 List 型,含有多个字符串,每一个字符串由多个数字组成。须要找出符合以下条件的字符串:第 1 个数字大于 6154 并小于等于6155。url

      Cbettwen的某个文档以下:.net

image.png

符合要求的字符串为:"6154.5,37.9,1.529,1.429,1.429","6155,30.4,1.505,1.532,1.543"。blog

集算器代码:接口

image.png

      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: 对游标进行批处理,得到内存数据,结果以下:

image.png

      A5:关闭mongodb链接。

      能够看见,SPL语言的实现相对mongodb来讲,更加精简容易。

相关文章
相关标签/搜索