azure-cosmosdb - Cosmos DB SQL API > 筛选出具有特定值的子数组对象

标签 azure-cosmosdb azure-cosmosdb-sqlapi

我有一个文档,其属性是对象数组。我想编写一个查询来过滤掉子数组中的对象。我认为 array_ contains 可以解决问题,但它似乎没有过滤子数组。

查询

SELECT Families.id, Families.parents
FROM Families
WHERE ARRAY_CONTAINS(Families.parents, { givenName: "Ben", familyName: "Wakefield" })

结果

[
    {
        "id": "WakefieldFamily",
        "parents": [
            {
                "familyName": "Wakefield",
                "givenName": "Robin"
            },
            {
                "familyName": "Miller",
                "givenName": "Ben"
            }
        ]
    }
]

期望结果

[
    {
        "id": "WakefieldFamily",
        "parents": [
            {
                "familyName": "Wakefield",
                "givenName": "Ben"
            }
        ]
    }
]

这可以通过 Cosmos DB SQL API 实现吗?

谢谢,

斯科特

最佳答案

您似乎使用官方示例数据作为 Cosmos DB 容器中的项目。

{
  "id": "WakefieldFamily",
  "parents": [
      { "familyName": "Wakefield", "givenName": "Robin" },
      { "familyName": "Miller", "givenName": "Ben" }
  ],
  "children": [
      {
        "familyName": "Merriam",
        "givenName": "Jesse",
        "gender": "female",
        "grade": 1,
        "pets": [
            { "givenName": "Goofy" },
            { "givenName": "Shadow" }
        ]
      },
      {
        "familyName": "Miller",
         "givenName": "Lisa",
         "gender": "female",
         "grade": 8 }
  ],
  "address": { "state": "NY", "county": "Manhattan", "city": "NY" },
  "creationDate": 1431620462,
  "isRegistered": false
}

您的SQL将获取parents数组中包含{ GiveName: "Robin", familyName: "Wakefield"}的项目并返回整个parents数组。这就是您没有获得预期结果的原因。

SELECT Families.id, Families.parents
FROM Families
WHERE ARRAY_CONTAINS(Families.parents, { givenName: "Robin", familyName: "Wakefield" })

您可以使用Array()函数构造一个数组来添加子查询的结果来执行此操作。像这样的事情:

SELECT Families.id, ARRAY(SELECT p.familyName,p.givenName FROM p in Families.parents WHERE p.familyName ='Wakefield' and p.givenName = 'Robin') AS parents
FROM Families

结果:

[
    {
        "id": "WakefieldFamily",
        "parents": [
            {
                "familyName": "Wakefield",
                "givenName": "Robin"
            }
        ]
    }
]

关于azure-cosmosdb - Cosmos DB SQL API > 筛选出具有特定值的子数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66790897/

相关文章:

Azure函数错误: The connection string for the monitored collection is in an invalid format

c# - 如何从 cosmos 数据库中删除容器中的所有项目?

c# - Cosmos DB DocumentClient 的 DateTime 处理中的错误

azure - Cosmos DB OFFSET LIMIT(NoSQL 查询)RU 成本

azure - 如何将值数组展平为 CosmosDB 查询中的行?

azure - Azure SQL API 是否支持 xml 查询?

azure-cosmosdb - 是否可以在 CosmosDB 中存储和查询数组空间数据?

azure-cosmosdb - 有没有办法在 Azure 数据工厂中插入带有嵌套数组的文档?

azure - C# Azure Function - CosmosDB 触发器和解析文档数据

azure - 错误: The order by query does not have a corresponding composite index that it can be served from