使用在 Cosmos 中不起作用的数组内容搜索文档
Searching for document using contents of array not working in Cosmos
我有下面的结构
我正在尝试使用 ARRAY_CONTAINS
查找项目
我想通过传入 Guid 并在公司数组中查找来查找项目 - 查看数组中对象的 companyId 属性
然后我需要 return itemName
{
"itemName": "An Item",
"companies": [
{
"companyId": "6fdc235e-69b7-42f9-9917-79411754fef0",
"companyName": "Test"
}
]
}
我试过这些组合,但 none 有效?
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
,允许在数组中搜索对象时进行部分匹配。
我有下面的结构
我正在尝试使用 ARRAY_CONTAINS
查找项目我想通过传入 Guid 并在公司数组中查找来查找项目 - 查看数组中对象的 companyId 属性
然后我需要 return itemName
{
"itemName": "An Item",
"companies": [
{
"companyId": "6fdc235e-69b7-42f9-9917-79411754fef0",
"companyName": "Test"
}
]
}
我试过这些组合,但 none 有效?
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
,允许在数组中搜索对象时进行部分匹配。