我有一条消息' DocumentDb中的集合:
{
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: []
}
我想选择所有包含' you@company.com'作为To或Cc地址:
SELECT Message.Subject
FROM Message
JOIN To IN Message.To
JOIN Cc IN Message.Cc
WHERE "you@company.com" IN (To.Address, Cc.Address)
这将返回第一个文档,但不返回第二个文档。
我认为JOIN Cc in Message.Cc
导致第二个文档从结果中删除,因为它是空的。
有没有办法构建SQL查询以在结果集中包含第二个文档?
答案 0 :(得分:1)
不,这需要两个查询(您可以使用用户定义的函数在一个查询中编写它,但该方法可能无法有效地使用索引)。
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" })
或者,如果您有Name和Value的值,则可以将其写为:
data['DATE'] = pd.to_datetime(data.DATE1.fillna(data.DATE2))
如果您希望将此添加到DocumentDB的查询中,请在https://feedback.azure.com/forums/263030-documentdb/支持/ upvote对子查询的支持。