我正在尝试实现https://neo4j.com/blog/moving-relationships-neo4j/指针功能,以将其用作团队订单计算机。有关模型,请参见http://imgur.com/a/MViF0。我正在使用此密码查询。
MERGE (list:LIST)
WITH list
MATCH (u) WHERE ID(u) IN [421, 419, 420]
MERGE (team:TEAM{name: u.name})
MERGE (team)-[:PARTOF]->(list)
WITH collect(team)as elems,list
FOREACH (n IN RANGE(0, LENGTH(elems)-2) |
FOREACH (prec IN [elems[n]] |
FOREACH (next IN [elems[n+1]] |
MERGE (prec)-[:NEXT]->(next))))
with list
MATCH (elem:TEAM) WHERE NOT (elem)<-[:NEXT]-()
MERGE (list)-[:POINTER]->(elem)
现在,这很好用,但是我只有一个问题。这行:
MATCH (u) WHERE ID(u) IN [421, 419, 420]
返回我的原始团队(按ID排序),但我想通过[421,419,420]模式中的模式来定义我的订单,例如
return * order by my array input.
请记住,它应该适用于任何数量的团队,这只是一个例子。而且我原来的团队节点未标记为团队,而是其他名称,因此我们每次都会重复。任何输入表示赞赏,谢谢。
尝试使用“ unwind”语句:
MERGE (list:LIST)
WITH list
UNWIND [421, 419, 420] as uid
MATCH (u) WHERE id(u) = uid
MERGE (team:TEAM{name: u.name})
...
[更新]当然,可以手动知道每个节点的顺序:
MERGE (list:LIST)
WITH list, [3871013, 3871011, 3871012] as ids
MATCH (u) WHERE ID(u) IN ids
WITH list, u,
FILTER(x in RANGE(0,size(ids)-1) WHERE ids[x] = id(u)) as orderIndex
ORDER BY orderIndex[0] // Sort by node position in the array of identifiers
MERGE (team:TEAM{name: u.name})
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句