sql - Azure SQL如何获取满足条件的数组中的第一个元素
问题描述
我有一个身体系列:
{
"id": "666",
"name": "Test",
"lastEvents": [
{
"show": false,
"eventType": "TYPE_1",
"creationDateTime": "2020-08-16T11:59:00"
},
{
"show": false,
"eventType": "TYPE_33",
"creationDateTime": "2020-10-14T06:11:00",
"control": "test repaired"
},
{
"show": false,
"eventType": "TYPE_33",
"creationDateTime": "2020-10-14T06:08:00",
"control": "test recovered"
}
],
"_rid": "kgsjAN-JFWEDQEQWESDAD==",
"_self": "JFWE=/docs/kgsjAN-JFWEDQEQWESDAD==/dbs/kgsjAA==/colls/kgsjAN",
"_etag": "\"666-0000-750011b7-0000-5eec704f0000\"",
"_attachments": "attachments/",
"_ts": 1592873510
}
我想按第一个 lastEvents.control
字段过滤它。现在我正在使用:
SELECT *
FROM root r
WHERE EXISTS(
SELECT VALUE n
FROM n IN r.lastEventFields
WHERE CONTAINS(n.control, "recovered", true)
)
但此查询贯穿所有 lastEvent 数组。就我而言,我只需要检查第一个带有字段的元素。control
我怎样才能达到预期的行为?
解决方案
如果我没有误解,您想获取作为数组中第一个元素的文档,control
它lastEvents
需要包含“已恢复”字符串。
如果是这样,SQL 无法满足您的要求。
解决方法:
1.创建UDF和循环lastEvents
数组。UDF 价格昂贵,请注意。如果需要,我可以提供 JS 代码。
2.在您的文档中添加一个文件,以在您保存/更新您的文档之前检查它是否满足您在客户端的需求。如果您经常更新文档,这不是一个好的选择。
3.获取所有文件并在客户端过滤它们。
推荐阅读
- c - 如何在 dup2 中使用 FIFO?
- html - 在固定导航栏上使用具有相对位置属性的包装器有什么意义?
- ios - 如何重新排序 collectionView 单元格,例如在主屏幕中重新排序应用程序(对于 iPhone)?
- python - 如何在python中为GET请求添加轮询间隔
- python - Python - 从派生类实例化的对象的序列号
- assembly - 6502汇编:16位减法进位结果
- delphi - 如何从 Java 按钮中隐藏手形光标?
- android - 颤振的条形码扫描仪结果
- javascript - 在 React Router Dom 中使用 history.push 登录/注销的空白页面
- python - Changestream MongoDB 和 Flask Python