我有以下查询可检索研究人员每篇论文的前2篇论文(以引用次数计):
C/user> scrapy runspider myFile.py
我从中得到的输出是:
MATCH (p:Paper)-[:SUBMITTED_TO]->(a:Proceeding),(p)-[:CITED_BY]->()
WITH p.paperTitle as Paper, size((p)-[:CITED_BY]->()) as numCitations,
collect(distinct a.proceedingName) as Proceedings
UNWIND Proceedings AS Proceeding
WITH Paper, numCitations, Proceeding
ORDER BY Paper, numCitations, Proceeding
RETURN Paper, numCitations, collect(Proceeding) as Proceedings
ORDER BY Proceedings, numCitations DESC
我现在想要做的是仅获取每个程序中出现的所有论文中的前2个(所有论文中的前三个),但是如果我在末尾使用 LIMIT 2 查询中,我只会得到所有结果的前2个(而不是每个过程的前2个):
Paper numCitations Proceedings
Title1 4 Proc1
Title2 3 Proc1
Title3 2 Proc1
Title4 7 Proc2
Title5 5 Proc2
Title6 3 Proc2
Title7 8 Proc3
Title8 4 Proc3
Title9 2 Proc3
请注意,Proc1已被完全丢弃。这不是我想要的。关于在Neo4j中如何执行此操作的任何想法?
谢谢!
答案 0 :(得分:0)
以下是我在族谱中用来查询一组男人中两个年龄最大的孩子(由其RN识别)的查询:
match (p:Person)<-[:father]-(c:Person) where p.RN in [5,7,27]
with p, c order by c.BD
with p.RN as RN,collect(c.fullname) as cC
return RN,cC[0..2]
类推,您可以按numCitations(而不是生日)对数据进行排序,然后将结果限制为2。