Neo4j 返回查询时结构未知的节点,带一个;计算的;添加属性?

Neo4j 返回查询时结构未知的节点,带一个;计算的;添加属性?,neo4j,cypher,Neo4j,Cypher,我需要返回节点及其ID,这样的事情应该避免: RETURN n, ID(n) as n_ID 我非常希望能够将ID作为节点的“计算”属性返回,这样客户端就可以看到节点,就好像它有一个名为ID的属性一样 几个小时来我一直在为这个伤脑筋。我发现最接近的是: 该方法是无用的,因为它需要在RETURN子句中将节点手动重建为map文本。如果您不知道所有的属性名称,这是不可能的,这将是我的应用程序中的典型场景;另外,可能会有大量的房产 接下来我尝试的是运算符“+”。它抛出类型不匹配;不能以这种方式将贴图与

我需要返回节点及其ID,这样的事情应该避免:

RETURN n, ID(n) as n_ID
我非常希望能够将ID作为节点的“计算”属性返回,这样客户端就可以看到节点,就好像它有一个名为
ID
的属性一样

几个小时来我一直在为这个伤脑筋。我发现最接近的是:

该方法是无用的,因为它需要在RETURN子句中将节点手动重建为map文本。如果您不知道所有的属性名称,这是不可能的,这将是我的应用程序中的典型场景;另外,可能会有大量的房产

接下来我尝试的是运算符“+”。它抛出类型不匹配;不能以这种方式将贴图与节点组合。我也找不到任何文档化的方法将节点转换为映射。文档提到KEYS(),但没有value(),也没有将键和值“压缩”到映射中的方法

我想尝试的另一件事是:

REDUCE(theMap = {id: ID(n)}, k in KEYS(n) | theMap + { what? : what? })
。。。但我既不知道如何在数组文本中执行“变量键”,也不知道如何通过变量键访问节点的属性


我试图在cypher中做的一切都是可能的吗?

您可以在
创建
节点后(在同一事务中)添加
id
属性权限。例如:

CREATE (n:Person {name: "Fred", address: "123 Main St"})
SET n.id = ID(n)
RETURN n;

这样,您的节点实际上将有一个
id
节点——以后无需计算它。

根据您对该id所做的操作,您可能需要重新考虑返回Neo4j节点id(内部id),而是在每个节点上生成并存储UUID属性。内部节点ID可以重用,不应用于引用外部系统中的节点。内部ID表示存储文件中的偏移量,如果删除节点,则可以填充存储文件中的这些间隙,从而回收已使用的ID


有一个插件可以自动创建UUID并在Github上进行讨论。

这尝起来像失败,但可能确实是唯一的方法。。。可悲的是,塞弗是多么非正统。概念上非常相似的功能(节点和映射都是键值对)顽固地拒绝一起工作。
CREATE (n:Person {name: "Fred", address: "123 Main St"})
SET n.id = ID(n)
RETURN n;