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

时间:2017-01-27 20:15:50

标签: azure-cosmosdb

我有一条消息' 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查询以在结果集中包含第二个文档?

1 个答案:

答案 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对子查询的支持。