函数
Cypher® Builder 实现了最常用的 Cypher 函数,例如 coalesce 或 count。在这些情况下,你可以直接调用提供的函数来生成等价的 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 的其他元素区分开来——例如函数 |
公开的函数名称尽可能接近其 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");