sql - 用于在数组中搜索的 Cosmos db sql 查询
问题描述
我有一个如下的文档结构
[
{
"id": "1",
"author": "John Smith",
"partNames": [
"PART.5",
"PART.10",
"PART.15",
"PART.30",
"PART.31"
]
...
},
{
"id": "2",
"author": "Mike Smith",
"partNames": [
"PART.4",
"PART.6",
"PART.17",
"PART.18",
"PART.20"
]
...
}
]
我尝试通过字段作者和partNames实现对用户的搜索,因此用户可以像这样进行查询
SELECT * FROM c WHERE CONTAINS(c.author, 'John')
id=1
因为作者的名字是 ,所以用户将得到文档的结果John
。
下一步是允许用户按部分请求文档,例如我想接收一个PART.4
存在的文档,所以查询将是
SELECT * FROM c WHERE ARRAY_CONTAINS(c.partNames, 'PART.4', true)
它返回 document id=2
。
更进一步,我想进行查询,允许用户输入PART.1
,他将收到文档id=1
,id=2
因为两者都有以开头的部分PART.1
那么有没有办法实现呢?
解决方案
请测试以下sql:
SELECT distinct value c FROM c
join p in c.partNames
where STARTSWITH(p, "PART.1")
结果:
更新:
Op 更改了一点数组,因为代替了[part.1, part2...]
项目,并制作了另一个结构,[ {part: part.1}, {part: part.2} ... ]
并设法使用用户定义的函数进行查询,类似于此处描述的DocumentDB SQL with ARRAY_CONTAINS并且它工作正常。
推荐阅读
- javascript - 需要帮助使用通过 Google App Script 获得的值更新工作表列
- jsdoc - JS includePattern 不起作用:“没有要处理的输入文件。”
- python - 无法从 python 的请求库中禁用日志记录
- reactjs - 添加新行物料表时编辑自定义列组件
- php - 简单查询 SQL Server 2019 标准的高 CPU 使用率
- c - 将二维数组与自身相乘的最佳方法
- vb.net - 如何在不使用依赖项的主键作为外键的情况下在 EF 中建模 1:M 关系?
- postgresql - 我怎样才能对这个表进行分区?
- javascript - 使用 Postgres 的 Express REST API 的 HTTP 方法
- awk - 如何在 Bash 中使用 AWK 使用 2 个键提取值?