Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
如何使用用户函数在neo4j中实现自动增量_Neo4j - Fatal编程技术网

如何使用用户函数在neo4j中实现自动增量

如何使用用户函数在neo4j中实现自动增量,neo4j,Neo4j,我需要为neo4j实现自动增量功能。 我使用一个用户定义的过程(thaks to)进行了如下操作: public class Sequence { public @Context GraphDatabaseService db; @Procedure(name = "sequence.id", mode = Mode.WRITE) @Description("sequence.id(name, length) - return next 'length' value(s) form sequ

我需要为neo4j实现自动增量功能。 我使用一个用户定义的过程(thaks to)进行了如下操作:

public class Sequence {

public @Context GraphDatabaseService db;

@Procedure(name = "sequence.id", mode = Mode.WRITE)
@Description("sequence.id(name, length) - return next 'length' value(s) form sequence with name 'name'")
public Stream<ListResult> sequence_id(@Name("name") final String name,
                                      @Name(value = "length", defaultValue = "1") Long length) {
    try (
         final Result results = db.execute(
             "WITH {length} as length\n" +
                 "MERGE (id:UniqueId{name:{name}})\n" +
                 "SET id.count = coalesce(id.count, 1) + length\n" +
                 "WITH length, id.count - length AS base\n" +
                 "UNWIND range(0, length - 1) AS idx\n" +
                 "RETURN collect(base + idx)  AS value", with("name", name, "length", length))) {

        return  results.<List>columnAs("value").map(ListResult::new).stream();
    }

    private Map<String, Object> with(String key1, Object value1, String key2, Object value2 ) {
        Map<String, Object> map = new HashMap<>();
        map.put(key1, value1);
        map.put(key2, value2);
        return map;
    }
    ...
}
公共类序列{
public@Context GraphDatabaseService数据库;
@过程(name=“sequence.id”,mode=mode.WRITE)
@描述(“sequence.id(name,length)-从名为“name”的序列中返回下一个“length”值)
公共流序列号(@Name(“Name”)最终字符串名,
@名称(value=“length”,defaultValue=“1”)长{
试一试(
最终结果=db.execute(
“以{length}作为长度\n”+
“合并(id:UniqueId{name:{name}})\n”+
SET id.count=合并(id.count,1)+长度\n+
长度为,id.count-长度为基数\n+
展开范围(0,长度-1)为idx\n+
“返回collect(base+idx)作为值”,带有(“name”、name、“length”、length))){
返回results.columnAs(“value”).map(ListResult::new).stream();
}
具有的私有映射(字符串键1、对象值1、字符串键2、对象值2){
Map Map=newhashmap();
映射放置(键1,值1);
地图放置(键2,值2);
返回图;
}
...
}
但我真正需要的是一个具有相同功能的函数

如何使用函数实现这一点?是否可以从用户定义的函数调用该过程?有人能给我举一些有用的例子吗

谢谢,

是只读的,这意味着它们无法更改数据库。因此,由于您的过程更新了
UniqueId
节点,因此无法将其转换为函数