首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制每个节点的子节点Neo4j Cypher

如何限制每个节点的子节点Neo4j Cypher
EN

Stack Overflow用户
提问于 2014-03-09 15:25:00
回答 2查看 808关注 0票数 1

我是Neo4j的新手,我有以下情况

在上面的图中,表示具有标签user的节点和具有标签shops的子节点。每个子节点都有带有标签items的子节点。每个节点items都有属性size,每个节点的项节点按size属性降序,如图中所示。

问题

我希望从每个items节点中得到两个大小小于或等于17shops节点。怎么做?我试过了,但没有按我需要的方式工作

这是我尝试过的

代码语言:javascript
复制
match (a:user{id:20000})-[:follows]-(b:shops)
with b
match (b)-[:next*]->(c:items)
where c.size<=17
return b
limit 2

备注-这些shops节点可以有数千个items节点。因此,如何在不遍历所有数千个items节点的情况下找到所需的节点。请帮忙,谢谢。

EN

Stack Overflow用户

发布于 2014-03-10 00:25:59

现在Cypher还没有很好地处理这种情况,我可能会为此做一个基于java的非托管扩展。

看起来是这样的:

代码语言:javascript
复制
public List<Node> findItems(Node shop, int size, int count) {
   List<Node> results=new ArrayList<>(count);
   Node item = shop.getSingleRelationship(OUTGOING, "next").getEndNode();
   while (item.getProperty("size") > size && results.size() < count) {
       if (item.getProperty("size") <= size) result.add(item);
       item = item.getSingleRelationship(OUTGOING, "next").getEndNode();
   }
   return result;
}


List<Node> results=new ArrayList<>(count*10);
for (Relationship rel = user.getRelationships(OUTGOING,"follows")) {
   Node shop = rel.getEndNode();
   results.addAll(findItems(shop,size,count));
}
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22284073

复制
相关文章

相似问题

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