函数

Cypher® Builder 实现了最常用的 Cypher 函数,例如 coalescecount。在这些情况下,你可以直接调用提供的函数来生成等价的 Cypher。

const movie = new Cypher.Node();

Cypher.coalesce(movie.property("title"), new Cypher.Param("The Matrix"));
coalesce(this0.title, $param0)

所有可用的函数也都拥有正确的 TypeScript 签名。

按照约定,所有 Cypher 函数都以 JavaScript 函数的形式提供,使用 camelCase 命名方式。这使得函数与子句及 Cypher Builder 的其他元素区分开来——例如函数 count()new Count() 子查询。

公开的函数名称尽可能接近其 Cypher 对应名称,并位于相同的命名空间。例如

Cypher.db.nameFromElementId("1234")

生成 Cypher 函数

db.nameFromElementId("1234")

自定义函数

在某些情况下,你可能需要使用 Cypher Builder 中不可用的函数。例如,当你使用插件或 Neo4j 的最新特性时。

针对这些情况,你可以使用 Function 类来创建自定义函数。下面的示例调用了任意函数 myFunction

const myFunction = new Cypher.Function("myFunction", [new Cypher.Literal(0)]);
myFunction(0);

Function 接受 2 个参数

  • name:函数的名称。

  • arguments(可选):一个包含传递给函数的参数的数组。

参数数组支持任何类型的 Cypher 表达式,从而可以传递更复杂的参数,例如

const myFunction = new Cypher.Function("myFunction", [Cypher.divide(new Cypher.Literal(0), new Cypher.Param(0))]);
myFunction((0 / $param0))

函数的实例(例如子句或过程)只能使用一次。如果需要调用同一个函数两次,需要创建两个独立的实例。

重用自定义函数

如果你想多次使用同一个函数,可以将自定义的 Function 类创建封装到一个 JavaScript 函数中。

function myFunction(value) {
    return new Cypher.Function("myFunction", value);
}

这样,函数就可以像内置函数一样使用了。

myFunction(new Cypher.Literal(0));

如果你使用 TypeScript,还可以让自定义函数具备类型安全。

function myFunction(value: Cypher.Expr): Cypher.Function {
    return new Cypher.Function("myFunction", value);
}

了解更多关于 Cypher Builder 中 Cypher 定制的信息,请参阅 自定义 Cypher

命名空间

Cypher 中的某些函数位于命名空间中,例如 apoc 函数。这种情况下,需要将 Function 类的名称设置为函数的完整路径,例如

new Cypher.Function("apoc.agg.first");
© . This site is unofficial and not affiliated with Neo4j, Inc.