我有标签为"Campaign"的节点。我每次都会按照不同的顺序得到它们。
因此,在查询DB之后,我得到了一个包含Campaigns对象的数组。
之后,我将它们发送到数据库中的另一个函数中。
MATCH (campaign:Campaign)
where campaign.id="1433855846340" or campaign.id="1433855948013" or campaign.id="1433856017523" or campaign.id="1433856146618" or campaign.id="1433856170282" or campaign.id="1433856364138" or campaign.id="1433856901298" or campaign.id="1433857169469" or campaign.id="1433857216853" or campaign.id="1433873093289" or campaign.id="1433873178949" or campaign.id="1433926766014"
with campaign optional match campaign<-[:TAKEN_IN]-(picture:Picture) with campaign, collect(picture) as pictures
with pictures[toInt(rand()*size(pictures))] as picture,campaign
optional match picture-[:UPLOADED_TO]->(facebookPicture:FacebookPicture)
RETURN picture.source as coverPicture,campaign.id
基本上,我所需要的就是以与where子句相同的顺序返回结果。我怎么能在不知道活动是否来自中的DB的情况下做到这一点
DESC-
,例如/
我认为这在客户端应用程序中是最容易做到的,只需将请求的id保存在一个数组中,并将结果放入一个键控数组(字典)中,然后根据原始数组中的id检索它们。
一般来说,您可以使用cypher中的参数和IN
子句来替换OR
构造。
MATCH (campaign:Campaign)
WHERE campaign.id IN {campaign_ids}
OPTIONAL MATCH campaign<-[:TAKEN_IN]-(picture:Picture)
WITH campaign, collect(picture) as pictures
WITH pictures[toInt(rand()*size(pictures))] as picture,campaign
OPTIONAL MATCH picture-[:UPLOADED_TO]->(facebookPicture:FacebookPicture)
RETURN picture.source as coverPicture, campaign.id