nosql - 使用 MarkLogic 进行计数
问题描述
我是 MarkLogic 领域的初学者,需要帮助来解决这个问题并澄清一下。这是 xml 类的示例。我需要一个函数来计算学生参加的课程数量,使用地图
<Classes>
<Class>
<Class-name>math</Class-name>
<Student-name>Jon</Student-name>
<Student-name>Sam</Student-name>
</Class>
<Class>
<Class-name>Sciences</Class-name>
<Student-name>Jon</Student-name>
<Student-name>Jack</Student-name>
<Student-name>Nay</Student-name>
</Class>
<Class>
<Class-name>Languages</Class-name>
<Student-name>Jon</Student-name>
<Student-name>Sam</Student-name>
<Student-name>Nay</Student-name>
</Class>
</Classes>
解决方案
一种不使用地图进行计数的方法是收集 的不同列表Student-name
,然后使用这些名称来获取Student-name
具有这些名称的元素的计数:
for $student in fn:distinct-values($Classes/Class/Student-name)
return
$student||":"||count($Classes/Class[Student-name=$student])
使用地图实现相同目的的一种方法是遍历每个Student-name
元素,在地图中放置一个条目,将当前计数增加 1:
let $stats := map:new()
let $_ :=
for $student in $Classes/Class/Student-name
return map:put($stats, $student, 1 + (map:get($stats, $student), 0)[1])
return
map:keys($stats) ! ( .||":"||map:get($stats, .) )
推荐阅读
- javascript - 如何从 iFrame 中获取文本值
- firebase - 使用 Admin SDK 发送超过 1000 条通知 - Firebase Cloud Messaging
- python - 如何使用 opencv 将 Monospace 字体插入图像中?
- c++ - 使用stl和没有节点c ++的霍夫曼编码
- sqlite - AnKo SQLite:从数据库异步填充列表视图?
- r - Syuzhet 与 SentimentR 的否定词和修饰符用于 R 中的情绪分析
- c# - 如何在 1 秒 Unity 3D 后停止功能?
- java - 带有继承的 Spring JWT 身份验证
- html - Button Active 焦点阴影默认问题
- servicestack - Servicestack 角色用户和组