我正在尝试在DocumentDb上运行以下查询
SELECT p.id
FROM p JOIN filter IN p.Filters
WHERE filter.Id = "686e4c9c-f1ab-40ce-8472-cc5d63597263"
AND filter.Id = "caa2c2a0-cc5b-42e3-9943-dcda776bdc20"
我的json是这样的
{
"id": "a3dc570b-26e2-40a9-8777-683186965f78",
"Filters": [
{
"Id": "686e4c9c-f1ab-40ce-8472-cc5d63597263"
},
{
"Id": "caa2c2a0-cc5b-42e3-9943-dcda776bdc20"
}
]
}
我想找到具有ID为“686e4c9c-f1ab-40ce-8472-cc5d63597263”的子过滤器的实体和具有Id“Id”的子过滤器:“caa2c2a0-cc5b-42e3-9943-dcda776bdc20”,但是查询不返回任何结果。
如果我使用OR而不是AND我可以得到结果,但这显然不是我想要的结果。
答案 0 :(得分:0)
要查询单个父级中的多个子级,您可以使用多个JOINS
。
注意:由于必须执行多个交叉产品,这可能会成为一项昂贵的查询。
SELECT p.id
FROM p
JOIN filter1 IN p.Filters
JOIN filter2 IN p.Filters
WHERE filter1.Id = "686e4c9c-f1ab-40ce-8472-cc5d63597263"
AND filter2.Id = "caa2c2a0-cc5b-42e3-9943-dcda776bdc20"
对于子项顺序具有确定性的情况 - 您可以通过在查询中使用子元素的索引来避免执行交叉积(JOIN
)。这将是更快,更便宜的查询:
SELECT p.id
FROM p
WHERE p.Filters[0].Id = "686e4c9c-f1ab-40ce-8472-cc5d63597263"
AND p.Filters[1].Id = "caa2c2a0-cc5b-42e3-9943-dcda776bdc20"