我有多个源自一个节点的关系。这些关系中的每一个都具有相同的标签。这些关系指向一个子节点(不一定是唯一的)。在获取通过此关系标签链接到父级的所有子节点后,我通过名为 trueindex 的关系属性对它们进行排序。然后,我有一个节点数组,我的客户端可以按正确的排序顺序迭代它们。
当我尝试“推入、弹出、取消移动等...”到该数组上时,问题就出现了。如果我想在订单的前面添加一个新的关系,我必须创建一个新的关系,使用它将父节点链接到子节点,然后向关系 trueindex 属性添加 0 值。问题是已经存在一个 trueindex 值为零的关系,我需要执行某种 casecading 函数来增加所有其他关系的 trueindex (相同类型,所有关系都源于同一父节点)。我正在尝试找到一种方法来免费获得这种“类似数组”的索引号功能
我能想到的唯一方法是首先删除源自父级的特定标签的所有关系。然后重写整个数组(以及将其 trueindex 加一的所有预先存在的关系)以反映正确的顺序。这对于小情况来说很好,但如果我计划父节点有大量的关系,那么每次我想添加、按索引删除、弹出等时重写整个数组(关系集)就会出现问题但仍然保持源自父节点的关系顺序。
Neo4j 是否具有某种关系功能,可以在创建新关系时按正确的顺序写入?
我非常感谢您提供的建议。
尝试将子节点保留在链表中。结构看起来像
(p:Parent)-[r1:CHILDREN]->(c1:Child)-[r2:NEXT]->(c2:Child)-[r3:NEXT]->(c3:Child)
这可以保持子节点的顺序,并允许您通过两种方式改进与结构的交互:
将新节点插入到该结构中仅涉及对该节点所在位置“之前”和“之后”的关系的更改,而不是整个结构的更改。例如,要插入newc
之间c1
and c2
,你删除r2
, 创造newc
并创造:NEXT
关系来自c1
to newc
to c2
。与其他操作类似:您的所有更改现在都在结构内本地。
您可以使用关系及其类型来构建数据,而不是关系属性。这更加灵活并且几乎总是更加高效(有时更加高效)。
要从此结构中读取单个子项,您现在可以使用trueindex
声明在链表中查找节点的深度,即
MATCH (parent:Parent {parentId: 1234})-[:CHILDREN]->()-[:NEXT*3]->(child)
RETURN child
并检索父级及其所有子级
MATCH (parent:Parent {parentId: 1234})-[:CHILDREN|NEXT*]->(child)
RETURN parent, COLLECT(child) as children
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)