ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – CosmosDB:如何查询嵌套在json数组中的值的存在?

2019-08-28 09:37:46  阅读:202  来源: 互联网

标签:javascript azure azure-cosmosdb


我的数据库实例包含一些具有以下模式的文档:

{
    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

结果:

enter image description here

添加where子句.

SELECT  a.subId as subId FROM c
join a in  c.myJsonArray
where a.subId='sub1'

结果:

enter image description here

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有