Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java插件在Neo4j中返回多个节点?_Java_Neo4j_Neo4j Apoc_Neo4j Plugin - Fatal编程技术网

如何使用Java插件在Neo4j中返回多个节点?

如何使用Java插件在Neo4j中返回多个节点?,java,neo4j,neo4j-apoc,neo4j-plugin,Java,Neo4j,Neo4j Apoc,Neo4j Plugin,我尝试用Java编写一个函数,在我的Neo4j图形数据库中查找具有相同名称和标签的节点 @UserFunction(value = "boris.example") @Description("finds nodes with same name") public ResourceIterator<Node> passName(@Name("nodeId") long nodeId) { Node nodeX = null; Node

我尝试用Java编写一个函数,在我的Neo4j图形数据库中查找具有相同名称和标签的节点

@UserFunction(value = "boris.example")
@Description("finds nodes with same name")

   public  ResourceIterator<Node> passName(@Name("nodeId") long nodeId)
   {
        Node nodeX = null;

        Node node = db.getNodeById( nodeId ); //Find node with spcific ID
        Object nameVal = node.getProperties("name"); //Get its name
        Label label = Label.label("VersionableObject"); //Decl. of label

        // Find nodes by label and name
        ResourceIterator<Node> nodes = db.findNodes(label, "name", nameVal); 
        nodes.close();

        return nodes;
   }
相同错误-Neo4j无法映射流

ResourceIterator<Node> nodes = db.findNodes(label, "name", nameVal);    

        while (nodes.hasNext()) {

            nodeX = nodes.next();

        }
        nodes.close();

return nodeX;
ResourceIterator节点=db.findNodes(标签“name”,nameVal);
while(nodes.hasNext()){
nodeX=nodes.next();
}
nodes.close();
返回nodeX;
Neo4j中的输出为空,即使它应该找到3个节点

将流转换为数组或列表也不起作用

查找一个节点并显示其自身或其属性,例如:

Node node = db.getNodeById( nodeId );
Map<String, Object> propertyMap = node.getProperties("name");
Node-Node=db.getNodeById(nodeId);
Map propertyMap=node.getProperties(“名称”);
编辑

使用mode.READ将@UserFunction更改为@Procedure后:

package org.neo4j.example.procedure_template;


import org.neo4j.graphdb.ResourceIterator;
import java.util.stream.Stream;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Node;
import org.neo4j.logging.Log;
import org.neo4j.procedure.*;
import org.neo4j.procedure.Description;
import org.neo4j.procedure.Name;


public class FindNode {

    @Context
    public GraphDatabaseService db;

    @Context
    public Log log;


    public FindNode() {
    }

    @Procedure(value = "boris.getAllNodesWithProperty", mode = Mode.READ)
    @Description("boris.getAllNodesWithProperty - finds Node by ID and return defined Property")

       public Stream<Node> passName(@Name("nodeId") long nodeId)

       {
        Node node = db.getNodeById( nodeId );
        Object nameVal = node.getProperties("name");
        Label label = Label.label("VersionableObject");

        ResourceIterator<Node> nodes = db.findNodes(label, "name", nameVal);
        Stream<Node> nodesStream = nodes.stream();

        return nodesStream;
       }

} 
package org.neo4j.example.procedure_模板;
导入org.neo4j.graphdb.ResourceIterator;
导入java.util.stream.stream;
导入org.neo4j.graphdb.GraphDatabaseService;
导入org.neo4j.graphdb.Label;
导入org.neo4j.graphdb.Node;
导入org.neo4j.logging.Log;
导入组织neo4j.程序。*;
导入org.neo4j.procedure.Description;
导入org.neo4j.procedure.Name;
公共类FindNode{
@上下文
公共图形数据库服务数据库;
@上下文
公共日志;
公共FindNode(){
}
@过程(value=“boris.getAllNodeWithProperty”,mode=mode.READ)
@说明(“boris.GetAllNodeWithProperty-按ID查找节点并返回定义的属性”)
公共流密码(@Name(“nodeId”)长nodeId)
{
Node Node=db.getNodeById(nodeId);
objectnameval=node.getProperties(“名称”);
Label Label=Label.Label(“VersionableObject”);
ResourceIterator节点=db.findNodes(标签“name”,nameVal);
Stream nodesStream=nodes.Stream();
返回nodesStream;
}
} 
在本例中,我得到:“输出字段为零的过程必须声明为VOID”

有什么想法吗?
谢谢大家!

在Neo4j中,您可以通过创建一些自定义的
用户定义函数
过程
来扩展Cypher


用户定义函数
只是一个转换器,它是只读的,返回一个类型,可以是:
长、长、双、双、布尔、布尔、字符串、节点、关系、路径、映射谢谢你的回答。我试着这样做,但后来我得到:“启动Neo4j失败:组件'org.Neo4j.server.database。LifecycleManagingDatabase@63f85119'已成功初始化,但启动失败。请参阅第63行中定义的附加原因异常“输出字段为零的过程必须声明为无效”:
package org.neo4j.example.procedure_template;


import org.neo4j.graphdb.ResourceIterator;
import java.util.stream.Stream;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Node;
import org.neo4j.logging.Log;
import org.neo4j.procedure.*;
import org.neo4j.procedure.Description;
import org.neo4j.procedure.Name;


public class FindNode {

    @Context
    public GraphDatabaseService db;

    @Context
    public Log log;


    public FindNode() {
    }

    @Procedure(value = "boris.getAllNodesWithProperty", mode = Mode.READ)
    @Description("boris.getAllNodesWithProperty - finds Node by ID and return defined Property")

       public Stream<Node> passName(@Name("nodeId") long nodeId)

       {
        Node node = db.getNodeById( nodeId );
        Object nameVal = node.getProperties("name");
        Label label = Label.label("VersionableObject");

        ResourceIterator<Node> nodes = db.findNodes(label, "name", nameVal);
        Stream<Node> nodesStream = nodes.stream();

        return nodesStream;
       }

} 
public class FindNode {

    @Context
    public GraphDatabaseService db;

    @Context
    public Log log;


    @Procedure(value = "boris.getAllNodesWithProperty", mode = Mode.READ)
    @Description("boris.getAllNodesWithProperty - finds Node by ID and return defined Property")
    public Stream<NodeResult> passName(@Name("nodeId") long nodeId)

    {
        Node node = db.getNodeById( nodeId );
        Object nameVal = node.getProperty("name");
        Label label = Label.label("VersionableObject");

        ResourceIterator<Node> nodes = db.findNodes(label, "name", nameVal);

        return nodes.stream().map( item -> new NodeResult(item));
    }

    public class NodeResult {

        public final Node node;

        public NodeResult(Node node) {
            this.node = node;
        }
    }


}