【发布时间】:2021-06-22 23:17:56
【问题描述】:
假设我有一堆 CONTACT 类型的文档:
{
"contactId": "V1234",
"contactFirstName": "A",
"contactLastName": "N",
"emailAddress": "12345",
"invitationId": "IVT:123",
"documentType": "CONTACT"
}
每个联系文件都有一个 EMAIL 文件和一个 INVITATION 文件:
EML:12345
{
"emailId": "12345",
"emailAddress" = ["abc@gmail.com"]
}
IVT:123
{
"invitationId": "IVT:123",
"invitationStatus": ["REGISTERED"]
}
假设我有一个 contactIds 数组:["V1234", "V2345" ... ]
如何为该列表中的每个contactId编写SELECT查询并选择contactFirstName、contactLastName、eml.emailAddress.[0]、invitation.status.[0](仅当状态为"REGISTERED"或@987654330类型时@.) 并将其限制为 10 个值。
我在想这样的事情:
SELECT DISTINCT
contact.contactFirstName as `contactFirstName`,
contact.contactLastName as `contactLastName`,
eml.emailAddress as `emailAddress`,
ivt.status[0].status AS invitationStatus
from
`contact-services` AS contact
INNER JOIN `contact-services` AS eml ON
CONCAT("EML",':',contact.contactEmailAddressIds[0]) =meta(eml).id
INNER JOIN `contact-services` AS ivt ON
contact.invitationId =meta(ivt).id
WHERE
contact.documentType="PERSON_CONTACT"
AND
ivt.status[0].status IN ["INVITED", "REGISTERED"]
and
contact.contactId IN ["V8459243"]
【问题讨论】:
-
除了限制为 10 之外,您的查询对我来说看起来不错。请注意,如果不指定排序顺序,您将无法有意义地限制您的结果 - 那么究竟应该如何确定“前”10 条记录?