我试图使用在第一个文档中找到的一些属性来一次查询多个文档,类似于对属性值的TSQL左联接。
我在CosmosDB中的尝试:
select c from assets
join ver on c.versions
where c.id = '123' OR c.id IN ver.otherIds
--NOTE: ver.otherIds is an array
上面的查询导致语法错误,表明它不理解ver.otherIds
。 docs的语法为where c.id in ("123","456"...)
我尝试解决的问题:
["123,"456"] --> "("123", "456")
array_contains(ver.otherIds, c.id)
select value c from c
where array_contains((select ... that produces array), c.id)
以上方法均无效。
我当然可以拉出第一笔资产,然后生成第二条查询以拉出其余资产,但我宁愿不这样做。我还可以对所有数据进行非规范化处理,但是如果不提供具体方案,最终将是一个非常糟糕的主意。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
您可以使用第二种情况:ARRAY_CONTAINS。
我的样本文档:
[
{
"id": "1",
"versions": [
{
"otherIds": [
"1",
"2",
"3"
]
}
]
},
{
"id": "2",
"versions": [
{
"otherIds": [
"1",
"2",
"3"
]
},
{
"otherIds": [
"123",
"2",
"3"
]
}
]
},
{
"id": "123",
"versions": [
{
"otherIds": [
"1",
"2",
"3"
]
},
{
"otherIds": [
"123",
"2",
"3"
]
}
]
}
]
SQL:
SELECT distinct c.id,c.versions FROM c
join ver in c.versions
where c.id="123" or array_contains(ver.otherIds,c.id,false)
ARRAY_CONTAINS 函数可以指定匹配是完全匹配还是部分匹配。