我需要对neo4j数据库中的数据进行分组,然后过滤除每个组的顶级n记录之外的所有内容。
示例:
我有两种节点类型:订单和物品。他们之间有一种“附加”的关系。“添加”关系具有时间戳属性。我想知道(对于每一篇文章),它是在前两篇文章中被添加到订单中的次数。我尝试了以下方法:
我的问题是,我被困在了第三步,是否有可能为每个代表一个顺序的子组得到前2行?
谢谢,
提比鲁
发布于 2015-10-06 10:06:58
试一试
MATCH (o:Order)-[r:ADDED]->(a:Article)
WITH o, r, a
ORDER BY o.oid, r.t
WITH o, COLLECT(a)[..2] AS topArticlesByOrder UNWIND topArticlesByOrder AS a
RETURN a.aid AS articleId, COUNT(*) AS count结果就像
articleId count
8 6
2 2
4 5
7 2
3 3
6 5
0 7在这个样本图上创建了
FOREACH(opar IN RANGE(1,15) |
MERGE (o:Order {oid:opar})
FOREACH(apar IN RANGE(1,5) |
MERGE (a:Article {aid:TOINT(RAND()*10)})
CREATE o-[:ADDED {t:timestamp() - TOINT(RAND()*1000)}]->a
)
)发布于 2015-10-05 17:25:15
使用LIMIT和ORDER BY相结合来获得任何东西的顶部N。例如,前五名的得分如下:
MATCH (node:MyScoreNode)
RETURN node
ORDER BY node.score DESC
LIMIT 5;ORDER BY部分确保最高的分数首先出现。LIMIT只给出前5,因为它们是排序的,所以总是最高的。
发布于 2015-10-06 09:01:06
我试图达到你想要的结果,但失败了。
所以,我猜-这个用纯密码是不可能的。
有什么问题吗?塞弗把一切都当成了一条路。实际上是在做穿越。
尝试将结果分组,然后对每个组执行筛选,意味着密码应该以某种方式将其分支,在某些点遍历。但是Cypher对所有结果执行过滤器,因为它们被认为是不同路径的集合。
我的建议-创建几个查询,实现所需的功能,并实现一些客户端逻辑。
https://stackoverflow.com/questions/32951651
复制相似问题