【发布时间】:2022-10-01 21:59:52
【问题描述】:
我想要做的是生成节点集合的所有排列,但是每个节点类型在每个排列中只出现一次。
例如,如果我有一个 u:User、l:Location、d:Device 节点的图表,假设每种类型有 3 个节点。
我希望能够生成的是一个可能看起来像这样的集合
User ID: 1, Location ID: 1
User ID: 1, Location ID: 2
User ID: 1, Location ID: 3
User ID: 1, Device ID: 1
User ID: 1, Device ID: 2
User ID: 1, Device ID: 3
User ID: 1, Location ID: 1, Device ID: 1
User ID: 1, Location ID: 1, Device ID: 2
User ID: 1, Location ID: 1, Device ID: 3
User ID: 1, Location ID: 2, Device ID: 1
User ID: 1, Location ID: 2, Device ID: 2
User ID: 1, Location ID: 2, Device ID: 3
依此类推,直到我拥有所有组合。
我不希望发生的情况是一个有效的组合不止一次地包含任何节点类型,因此一个组合只能有一个用户、一个位置和一个设备。
目前我正在使用 apoc.coll.combinations,但我似乎无法找到一种方法来阻止它使节点类型不同。
如果我要跑
MATCH (l:Location)-[]-(d:Device)-[]-(ur:User)
WITH COLLECT({l:l,ur:ur}) as coll
WITH apoc.coll.combinations(coll,1,size(coll)) as combColl
RETURN combColl
我会用完内存,因为有效的组合将是所有位置和所有用户风险。
【问题讨论】: