[英]CosmosDB: how to query for the existence of a value nested in a json array?
我的数据库实例包含一些具有以下模式的文档:
{
id: <someGuid>
myJsonArray: [
{
subId: SmallUniqueId1,
val: <someValue>
},
{
subId: SmallUniqueId2,
val: <someOtherValue>
}
]
}
我有一个生成新SubIds的Web API(您可以将它们视为随机生成的base64字符串,其最大长度为5个字符)。
我想查询我的数据库,以验证新创建的SubId在我的所有文档中都不存在。
我认为解决方案可能涉及将新的subId值插入WHERE子句(我通过REST API访问CosmosDB)。 这是我不知道的:
我不知道如何查询每个文档的JsonArray的每个元素(如果它只是查询单个字符串字段,那将很容易)
我正如你所描述的那样在我的azure cosmosdb
创建了两个示例文档。
[
{
"id": "id1",
"myJsonArray": [
{
"subId": "sub1",
"val": "value1"
},
{
"subId": "sub2",
"val": "value2"
}
],
},
{
"id": "id2",
"myJsonArray": [
{
"subId": "sub3",
"val": "value3"
},
{
"subId": "sub4",
"val": "value4"
}
],
}
]
您可以使用下面的SQL
查询数组中的field
。
SELECT a.subId as subId FROM c
join a in c.myJsonArray
结果:
添加where clause
。
SELECT a.subId as subId FROM c
join a in c.myJsonArray
where a.subId='sub1'
结果:
我也不确定这个查询的效率,以及这种用于验证新ID的方法是否通常是一个糟糕的模式。 我有一个分区CosmosDB实例 - subId验证检查不应经常发生。
根据需要,我认为您可以在Azure Cosmos DB中使用User Defined Function
。
在向DB创建文档时调用UDF
,检查字段值是否已存在,返回boolean
结果。
请参阅此官方文档 。
希望它能帮到你。 如有任何疑虑,请随时告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.