在相册中查找大量照片

时间:2020-07-26 18:40:46

标签: neo4j cypher

我有相册,他们的照片存储在Neo4j中。我希望能够找到一张专辑并获得一定数量的照片。目的是根据需要延迟加载照片(分页)。

现在我可以执行以下操作来实现我想要的功能:

match(p:Photo)-[bt:BELONGS_TO]->(a:Album) where a.name = "Summer 2019" return a, collect(p)[..4] as photos

但是,我希望能够通过不同的标准(例如上载日期或创建日期)对照片列表进行排序。我不确定这是否是最好的方法。

match(p:Photo)-[bt:BELONGS_TO]->(a:Album) where a.name = "Summer 2019" return a, collect(p)[4..] as photos order by p.file_name

失败,并告诉我以下内容:

在带有DISTINCT的WITH / RETURN或聚合中,无法访问在WITH / RETURN之前声明的变量:p

如果可能的话,我想保持结果的格式完全相同(一张专辑,一张照片),这样我就不必在应用程序代码中进行复杂的映射:

╒══════════════════════╤══════════════════════════════════════════════════════════════════════╕
│"a"                   │"photos"                                                              │
╞══════════════════════╪══════════════════════════════════════════════════════════════════════╡
│{"name":"Summer 2019"}│[{"file_name":"cat.jpeg"},{"file_name":"dog.jpeg"},{"file_name":"birdi│
│                      │e.jpeg"},{"file_name":"bird.jpeg"}]                                   │
└──────────────────────┴──────────────────────────────────────────────────────────────────────┘

是否有一种干净的方法可以在对照片进行排序的同时获取这种格式?

1 个答案:

答案 0 :(得分:1)

在收集p节点之前,您需要先进行订购

MATCH (p:Photo)-[bt:BELONGS_TO]->(a:Album) 
WHERE a.name = "Summer 2019" 
WITH
    a,
    p
ORDER BY p.file_name
RETURN a, collect(p)[4..] as photos