Azure cosmosdb DocumentDb:多个联接是否可以包含空集

Azure cosmosdb DocumentDb:多个联接是否可以包含空集,azure-cosmosdb,Azure Cosmosdb,我在DocumentDb中有一个“消息”集合: { 主题:“富”, 致:[ {“姓名”:“我”,“地址”:”me@company.com" } ], 抄送:[ {“姓名”:“您”,“地址”:”you@company.com" } ] } 及 { 主题:“酒吧”, 致:[ {“姓名”:“您”,“地址”:”you@company.com" } ], 抄送:[] } 我想选择所有已删除的文档you@company.com'作为收件人或抄送地址: SELECT Message.Subject 从消息

我在DocumentDb中有一个“消息”集合:

{
主题:“富”,
致:[
{“姓名”:“我”,“地址”:”me@company.com" }
],
抄送:[
{“姓名”:“您”,“地址”:”you@company.com" }
]
}

{
主题:“酒吧”,
致:[
{“姓名”:“您”,“地址”:”you@company.com" }
],
抄送:[]
}
我想选择所有已删除的文档you@company.com'作为收件人或抄送地址:

SELECT Message.Subject
从消息
加入到消息中。加入到
在Message.Cc中加入Cc
“在哪里”you@company.com“在(收件人地址,抄送地址)
这将返回第一个文档,但不返回第二个文档

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


是否有一种方法可以构造SQL查询以将第二个文档包含在结果集中?

否,这需要两个查询(您可以使用用户定义的函数在一个查询中编写它,但这种方法可能无法有效地使用索引)

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

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的查询中,请在处支持/支持对子查询的投票。

我已对子查询请求进行了投票。这是存储过程的合理候选项吗?谢谢。存储过程与UDF有相同的问题,它们将无法使用索引。我绝对推荐两个查询——它更轻量级,甚至可以并行运行它们。
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" })