javascript – CosmosDB:如何查询嵌套在json数组中的值的存在?
作者:互联网
我的数据库实例包含一些具有以下模式的文档:
{
id: <someGuid>
myJsonArray: [
{
subId: SmallUniqueId1,
val: <someValue>
},
{
subId: SmallUniqueId2,
val: <someOtherValue>
}
]
}
我有一个生成新SubIds的Web API(您可以将它们视为随机生成的base64字符串,其最大长度为5个字符).
我想查询我的数据库,以验证新创建的SubId在我的所有文档中都不存在.
我认为解决方案可能涉及将新的subId值插入WHERE子句(我通过REST API访问CosmosDB).这是我不知道的:
>我不知道如何查询每个文档的JsonArray的每个元素(如果它只是查询单个字符串字段,那将很容易)
>我也不确定这个查询的效率,以及这种用于验证DB中已经存在的ID的方法通常是不好的模式.我有一个分区CosmosDB实例 – subId验证检查不应经常发生.
解决方法:
I don’t know how to query over every element of each document’s
JsonArray (if it was just querying on a single string field, it would
be easy)
我正如你所描述的那样在我的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查询数组中的字段.
SELECT a.subId as subId FROM c
join a in c.myJsonArray
结果:
添加where子句.
SELECT a.subId as subId FROM c
join a in c.myJsonArray
where a.subId='sub1'
结果:
I’m also not sure about the efficiency of this query and whether this
approach for validating new Ids against what’s already in the DB is,
in general, a bad pattern. I have a one partition CosmosDB instance –
the subId validation check should not occur very often.
根据需要,我认为您可以在Azure Cosmos DB中使用用户定义函数.
在向DB创建文档时调用UDF,检查字段值是否已存在,返回布尔结果.
请参阅official doc.
希望它能帮到你.如有任何疑虑,请随时告诉我.
标签:javascript,azure,azure-cosmosdb 来源: https://codeday.me/bug/20190828/1750108.html