1

我有下面的结构

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

我想通过传入一个 Guid 并在公司数组中查找它来查找项目 - 查看数组中对象的 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个左右

我究竟做错了什么?

保罗

4

1 回答 1

0

您将 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,允许在数组中搜索对象时进行部分匹配。

于 2020-04-20T11:08:39.643 回答