使用 DocumentDb 加入多个 children
Join multiple children with DocumentDb
我正在尝试 运行 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”的 child 过滤器和 ID 为 "Id" 的 child 过滤器的实体:"caa2c2a0-cc5b-42e3-9943-dcda776bdc20",但是查询 returns 没有结果。
如果我用OR代替AND也能得到结果,但显然不是我想要的结果
要查询单个父项中的多个子项 - 您可以使用多个 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"
我正在尝试 运行 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”的 child 过滤器和 ID 为 "Id" 的 child 过滤器的实体:"caa2c2a0-cc5b-42e3-9943-dcda776bdc20",但是查询 returns 没有结果。
如果我用OR代替AND也能得到结果,但显然不是我想要的结果
要查询单个父项中的多个子项 - 您可以使用多个 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"