使用 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"