打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
查询 MongoDB 子文档的 List 字段
在 Mongodb 应用中,经常会在 List 结构中存入由若干字段组合而成的字符串数据。这种方式对于 Mongodb 的管理比较方便,如大量导入导出数据时,不用关注数据与字段的对齐问题,导入导出数据也比较快。不过,事物的特性往往存在两方面,有利有弊,这种方式在遇到统计计算需求时,就需要将字符串进行拆分,同时转换数据类型,再进行数据计算。这时用 mongodb shell 操作就比较麻烦了,而集算器 SPL 语言拥有丰富的接口函数,实现就容易多了。现在我们通过样例来看看如何实现。
Collction Cbettwen含有多级子文档,其中 dataList 是 List 型,含有多个字符串,每个字符串由多个数字组成。需要找出符合如下条件的字符串:第 1 个数字大于 6154 并小于等于6155。
Cbettwen的某个文档如下:{
"_id" : ObjectId("54f6a766bf4436333edcd6a2"),
"_class" : "com.abc.core.bo.obj.Objs",
"objList" : [
{
"name" : "ABB-09",
"uid" : "ABB-09",
"data" : {
"dataId" : NumberLong(0),
"dataList" : [
"6150,32.9,1.475,,1.434",
"6150.5,43,,1.529,1.402",
"6151,31.8,1.506,1.447,1.453",
"6151.5,33.6,1.481,1.456,1.521",
"6152,30.9,1.465,1.472,1.547",
"6152.5,39.5,1.404,1.425,1.485",
"6153,43.2,1.406,1.446,1.481",
"6153.5,39.5,1.433,1.468,1.488",
"6154,32.7,1.459,1.477,1.427",
"6154.5,37.9,1.529,1.429,1.429",
"6155,30.4,1.505,1.532,1.543",
"6155.5,37.3,1.49,1.436,1.462",
"6156,35.3,1.538,1.45,1.488",
"6156.5,37.3,1.517,1.535,1.473",
"6157,32.7,1.401,1.405,1.497",
"6157.5,38.9,1.488,1.468,1.499",
"6158,35.4,1.526,1.422,1.452",
"6158.5,43.3,1.516,1.433,1.491",
"6159,34.6,1.519,1.442,1.478",
"6159.5,42.7,1.426,1.514,1.428",
"6160,32.7,1.451,1.5,1.516"
]
}
}
]
}
符合要求的字符串为:"6154.5,37.9,1.529,1.429,1.429","6155,30.4,1.505,1.532,1.543"。
集算器代码:
A
1=mongo_open("mongodb:// localhost:27017/local?user=test&password=test")
2=mongo_shell(A1,"Cbettwen.find(,{_id:0})")
3=A2.conj((t=~.objList.data.dataList.new(~),t.select((s=float(#1.split@c()(1)),s>6154   && s<=6155))))
4=A3.fetch()
5=mongo_close(A1)
A1:连接MongoDB,连接字格式为mongo://ip:port/db?arg=value&…。
A2:使用find函数从MongoDB中取数,形成游标。collection是Cbettwen,过滤条件是空,取出_id之外的所有字段。
A3:找到符合条件的字符串。函数conj可对A2中每个文档的计算结果进行合并,~表示上级序表的每个成员。函数new可新建序表。#1表示序表的第1个字段。函数split可将字符串拆为序列,默认分隔符是逗号,@1表示只拆成两个成员,遇到第1个分隔符就返回。s表示将首个字符串转换成float类型的数值,然后进行比较筛选。
A4: 对游标进行批处理,获得内存数据,结果如下:
6154.5,37.9,1.529,1.429,1.429
6155,30.4,1.505,1.532,1.543
6154.6,100.9,1.529,1.429,1.429
6154.7,200.9,1.529,1.429,1.429
6155,100.3,1.49,1.436,1.462
6155,200.3,1.49,1.436,1.462
6154.6,300.9,1.529,1.429,1.429
6154.7,400.9,1.529,1.429,1.429
6155,300.3,1.49,1.436,1.462
6155,400.3,1.49,1.436,1.462
6154.6,500.9,1.529,1.429,1.429
6154.7,600.9,1.529,1.429,1.429
6155,500.3,1.49,1.436,1.462
A5:关闭mongodb连接。
可以看见,SPL语言的实现相对mongodb来说,更加精简容易。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring认证中国教育管理中心-Spring Data MongoDB教程十三
PHP操作MongoDB简明教程
通过 MongoDB 使用 NoSQL(第1部分)
mongo nosql
MongoDB分片实战:集群搭建
MongoDB 关于MongoDB Shell的使用 (三)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服