azure - 使用数组内容搜索文档在 Cosmos 中不起作用

标签 azure azure-cosmosdb azure-cosmosdb-sqlapi

我的结构如下

我正在尝试使用 ARRAY_CONTAINS 查找项目

我想通过传入 Guid 并在 Companies 数组中查找它来查找项目 - 查看数组中对象的 companyId 属性

然后我需要返回 itemName

{
    "itemName": "An Item",
    "companies": [
        {
            "companyId": "6fdc235e-69b7-42f9-9917-79411754fef0",
            "companyName": "Test"
        }
    ]
}

我已经尝试过这些组合,但没有任何效果?

SELECT * FROM c WHERE c.companies.companyId = '6fdc235e-69b7-42f9-9917-79411754fef0'
SELECT * FROM c WHERE ARRAY_CONTAINS(c.companies, '6fdc235e-69b7-42f9-9917-79411754fef0')
SELECT * FROM c WHERE ARRAY_CONTAINS(c.companies.companyId, '6fdc235e-69b7-42f9-9917-79411754fef0')

我需要在这里使用效率最高的方法,因为将要搜索 32000 个项目

公司列表不会很大,最多可能有 10 家左右

我做错了什么?

保罗

最佳答案

您正在数组中存储 JSON 文档,因此您需要查找要存储的对象的特定属性。像这样的东西:

SELECT *
FROM c
WHERE ARRAY_CONTAINS(c.companies, {'companyId':'6fdc235e-69b7-42f9-9917-79411754fef0'},true)

您提到只需要itemName,因此您可以优化为:

SELECT c.itemName
FROM c
WHERE ARRAY_CONTAINS(c.companies, {'companyId':'6fdc235e-69b7-42f9-9917-79411754fef0'},true)

第三个参数设置为true,允许在数组中搜索对象时进行部分匹配。

关于azure - 使用数组内容搜索文档在 Cosmos 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61319924/

相关文章:

azure - 使用列表获取 Azure 资源

azure-cosmosdb - SQL Azure 表是否类似于 Azure Cosmos DB 容器?

Azure Cosmos DB 更改源重试特定文档

azure - Select not in subquery select Cosmos DB,语法错误

azure - 有哪些可能的 Web 应用程序 (AWS) 无服务器系统架构可用于削减成本

azure - 我可以将 Skype(或 Skype for Business)集成到 Azure AD B2C 上的 Web 应用程序中吗?

node.js - Azure DevOps Pipeline - React Js 应用程序构建在构建过程中失败(npm run build)

azure - 为什么我的主 DocumentDB key 和辅助 DocumentDB key 没有显示在 Azure 门户中?

azure - 使用 Azure 函数中的 Cosmos DB 表 API

javascript - 文档数据库 : How to define a callback function in stored procedures when using JavaScript Language Integrated Query?