首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取neo4j中每个组的前n项记录

获取neo4j中每个组的前n项记录
EN

Stack Overflow用户
提问于 2015-10-05 14:56:13
回答 3查看 3K关注 0票数 10

我需要对neo4j数据库中的数据进行分组,然后过滤除每个组的顶级n记录之外的所有内容。

示例:

我有两种节点类型:订单和物品。他们之间有一种“附加”的关系。“添加”关系具有时间戳属性。我想知道(对于每一篇文章),它是在前两篇文章中被添加到订单中的次数。我尝试了以下方法:

  1. 得到所有的订单-添加-条款
  2. 将步骤1的结果按顺序id作为第一排序键,然后按添加关系的时间戳作为第二排序键进行排序;
  3. 对于步骤2中的每个子组代表一个顺序,只保留前2行;
  4. 在步骤3的输出中计数不同的项目in;

我的问题是,我被困在了第三步,是否有可能为每个代表一个顺序的子组得到前2行?

谢谢,

提比鲁

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-06 10:06:58

试一试

代码语言:javascript
复制
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

结果就像

代码语言:javascript
复制
articleId    count
   8           6
   2           2
   4           5
   7           2
   3           3
   6           5
   0           7

在这个样本图上创建了

代码语言:javascript
复制
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
    )
)
票数 12
EN

Stack Overflow用户

发布于 2015-10-05 17:25:15

使用LIMITORDER BY相结合来获得任何东西的顶部N。例如,前五名的得分如下:

代码语言:javascript
复制
MATCH (node:MyScoreNode) 
RETURN node
ORDER BY node.score DESC
LIMIT 5;

ORDER BY部分确保最高的分数首先出现。LIMIT只给出前5,因为它们是排序的,所以总是最高的。

票数 2
EN

Stack Overflow用户

发布于 2015-10-06 09:01:06

我试图达到你想要的结果,但失败了。

所以,我猜-这个用纯密码是不可能的。

有什么问题吗?塞弗把一切都当成了一条路。实际上是在做穿越。

尝试将结果分组,然后对每个组执行筛选,意味着密码应该以某种方式将其分支,在某些点遍历。但是Cypher对所有结果执行过滤器,因为它们被认为是不同路径的集合。

我的建议-创建几个查询,实现所需的功能,并实现一些客户端逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32951651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档