Neo4j3.5学习笔记——Traversal遍历之在遍历查询中的唯一路径

跟着官网代码学习.jpg–jdk 1.8.0 & neo4j 3.5
https://neo4j.com/docs/java-reference/current/java-embedded/

目标:返回属于“Principal1拥有的pet0的孩子”
1. 创建一个图数据库:

  • 目标图:
    在这里插入图片描述
    为了返回 Pet0 的所有后代,要求与 Pet0 必须有 owns 和 Principal1 关系(实际上只有 Pet1 和 Pet3 ),

2. 代码实现:

  • 不知道为啥,只要不传入Node,我的Traverser方法的返回值就没有内容,请问 各位 大佬这是什么诡异的问题。该代码还存在一定问题,但能了解Uniqueness的用法了。
  • 遍历查询的 Uniqueness 应该设置成 NODE_PATH 来代替默认的 NODE_GLOBAL,这样节点可以被遍历不止一次,那些有不同节点但也有一些相同节点的路径(比如开始节点和结束节点)也能被返回。
private Traverser getPets(final Node startNode) {
        Node endNode = graphDb.getNodeById(P1NodeId);
        TraversalDescription td = graphDb.traversalDescription()
                .breadthFirst()
                .relationships(RelTypes.DESCENDENT,Direction.OUTGOING)
                .relationships(RelTypes.OWNS,Direction.INCOMING)
                .uniqueness( Uniqueness.NODE_PATH )
                .evaluator(Evaluators.includeWhereEndNodeIs(endNode));
        return td.traverse(startNode);
    }

    private String printNode() {
        try (Transaction tx1 = graphDb.beginTx()) {
            int count = 0;
            Node startNode = graphDb.getNodeById(pet0NodeId);
            //String output = "Principal1 owns" + "\n";
            String output = "";
            Traverser ownerTraverser = getPets(startNode);
            System.out.println(ownerTraverser);
            for (Path petpath : ownerTraverser) {
                output += petpath.toString() + "\n";
                count++;
            }
            return output;
        }
    }

1) Node_PATH结果:
在这里插入图片描述
2) Node_GLOBAL结果:
在这里插入图片描述

3. 具体代码见: https://github.com/Amy996bbq/Neo4j/blob/master/learn/Uniqueness_pet.java

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值