Javascript 具有未知属性列表的neo4j匹配节点

Javascript 具有未知属性列表的neo4j匹配节点,javascript,node.js,neo4j,cypher,Javascript,Node.js,Neo4j,Cypher,我正在使用merge动态构建图形,以避免创建重复项。我有一个类似这样的问题: `MERGE(a:${node.type} {id:'${node.id}', label:'${node.label}'}) SET a += $att RETURN a`, {att:node.attributes} 因此,我知道要添加的节点的类型、id和标签,但也有一个未知的属性列表。我不知道列表的长度,也不知道列表中的键。我需要在完整的属性列表上进行合并,但按照我当前的查询方式,每次节点匹配类型、id和标签时

我正在使用
merge
动态构建图形,以避免创建重复项。我有一个类似这样的问题:

`MERGE(a:${node.type} {id:'${node.id}', label:'${node.label}'}) SET a += $att RETURN a`, {att:node.attributes}
因此,我知道要添加的节点的类型、id和标签,但也有一个未知的属性列表。我不知道列表的长度,也不知道列表中的键。我需要在完整的属性列表上进行
合并
,但按照我当前的查询方式,每次节点匹配类型、id和标签时,节点的属性都会被重写

我也尝试过:

 MERGE(a:${mergedObject.type} $node) RETURN a`, {node: mergedObject}
使用Neo4jError失败:不能在合并模式中使用参数映射


如何匹配未知属性列表(长度/键)上的节点?我正在使用模块。我需要整个节点及其所有属性都是唯一的。

MERGE
要求您对要使用的属性名称进行硬编码,因此无法动态地将属性提供给
MERGE


但是,node.js代码可以动态生成
合并
查询。但是您必须小心地以避免密码的方式编写node.js代码。避免代码注入的一种方法是生成硬编码的属性名称,但将每个属性值作为一个值传递。

MERGE
要求您对要使用的属性名称进行硬编码,因此无法动态地将属性提供给
MERGE


但是,node.js代码可以动态生成
合并
查询。但是您必须小心地以避免密码的方式编写node.js代码。避免代码注入的一种方法是生成硬编码的属性名称,但将每个属性值作为一个值传递。

什么应该唯一地定义节点?
id
足够了吗?您需要确定哪些属性是唯一定义节点的属性,然后仅对这些属性进行合并,然后设置其余的属性(或者根据合并是否导致与已存在的对象匹配,或者是否必须创建节点,如果存在不同的行为,则在“匹配集”和“创建集”上使用)@InverseFalcon,整个节点应该是唯一的,包括其中的每个属性。@Jordan.J.D当然,每个节点的整个属性集可能是唯一的,但您可能忽略许多属性,仍然可以使用最小的属性集(理想情况下,只有一个)来标识特定节点。@cybersam,也许我在做一些奇怪的事情,但在我的例子中,我有一组未知的属性,需要是唯一的。这是可能的吗?什么应该唯一地定义一个节点?
id
足够了吗?您需要确定哪些属性是唯一定义节点的属性,然后仅对这些属性进行合并,然后设置其余的属性(或者根据合并是否导致与已存在的对象匹配,或者是否必须创建节点,如果存在不同的行为,则在“匹配集”和“创建集”上使用)@InverseFalcon,整个节点应该是唯一的,包括其中的每个属性。@Jordan.J.D当然,每个节点的整个属性集可能是唯一的,但您可能忽略许多属性,仍然可以使用最小的属性集(理想情况下,只有一个)来标识特定节点。@cybersam,也许我在做一些奇怪的事情,但在我的例子中,我有一组未知的属性,需要是唯一的。这可能吗?