函数

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 的其他元素区分开来——例如函数 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.