我有一个带有 body 的集合:
{
"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
}
我想通过 first lastEvents.control
字段过滤它。现在我正在使用:
SELECT *
FROM root r
WHERE EXISTS(
SELECT VALUE n
FROM n IN r.lastEventFields
WHERE CONTAINS(n.control, "recovered", true)
)
但是这个查询遍历所有lastEvent数组。就我而言,我必须仅检查带有 control
字段的第一个元素。
我怎样才能达到预期的行为?
最佳答案
如果我没有误解的话,您想要获取 lastEvents
数组中第一个元素具有 control
字段的文档,并且它需要包含“recovered”字符串.
如果是这样,SQL就无法达到您的要求。
解决方法:
1.创建UDF并循环lastEvents
数组。 UDF可能价格昂贵,请注意。如果您需要,我可以提供JS代码。
2.在保存/更新文档之前,在文档中添加一个字段,以在客户端检查它是否满足您的需要。如果您经常更新文档,这不是一个好的选择。
3.获取您的所有文档并在客户端过滤它们。
关于sql - Azure SQL如何获取数组中满足条件的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65322162/