DocumentDb:多个连接是否可以包含空集

DocumentDb: can multiple joins include empty sets

我在 DocumentDb 中有一个 'Message' 集合:

{
  Subject: "Foo",
  To: [
    { "Name": "Me", "Address": "me@company.com" }
  ],
  Cc: [
    { "Name": "You", "Address": "you@company.com" }
  ]
}

{
  Subject: "Bar",
  To: [
    { "Name": "You", "Address": "you@company.com" }
  ],
  Cc: []
}

我想select所有收件人或抄送地址为'you@company.com'的文件:

SELECT Message.Subject
FROM Message
  JOIN To IN Message.To
  JOIN Cc IN Message.Cc
WHERE "you@company.com" IN (To.Address, Cc.Address)

这是 returns 第一个文档,而不是第二个文档。

我认为 JOIN Cc in Message.Cc 导致第二个文档从结果中删除,因为它是空的。

有什么方法可以构建 SQL 查询以在结果集中包含第二个文档?

不,这需要两个查询(您可以使用 user-defined 函数将其写在一个查询中,但这种方法可能无法有效地使用索引)。

  SELECT Message.Subject
  FROM Message
  JOIN To IN Message.To
  WHERE To.Address = "you@company.com"

  SELECT Message.Subject
  FROM Message
  JOIN To IN Message.Cc
  WHERE Cc.Address = "you@company.com"

或者,如果名称和值都有值,您可以将其写为:

SELECT Message.Subject
FROM Message
WHERE ARRAY_CONTAINS(Message.To, { "Name": "You", "Address": "you@company.com" }) 
OR ARRAY_CONTAINS(Message.Cc, { "Name": "You", "Address": "you@company.com" })

如果您希望将此添加到 DocumentDB 的查询中,请 support/upvote 在 https://feedback.azure.com/forums/263030-documentdb/ 支持 sub-queries。