我有一个用于组的节点,用户是该节点的成员。我想在用户注册时随机将其自动分配给一个组。有没有一种方法可以随机匹配某一类型的单个节点。
MATCH (g:Group) return g
以上将为我提供所有组。为了建立这种关系,我会做以下事情:
MATCH (u:User {id: <ID>}), (g:Group {id: <ID>}) CREATE (u)-[r:MEMBER_OF]->(g) RETURN type(r)
但我想做这样的事情:
CREATE(u:User {
id: apoc.create.uuid(),
firstName: $firstName,
username: $username,
phoneNumber: $phoneNumber,
createdAt: datetime(),
updatedAt: datetime(),
role: 'USER'
}
)
WITH u
MATCH (g:Group)
//
CREATE (u)-[:MEMBER_OF]->(g)
return u
其中我将匹配一个随机组,然后创建MEMBER_OF关系。最终可能还有其他考虑因素,但目前我只想随机选择一个小组,然后建立关系。
您可以使用apoc函数apoc.coll.randomItem从所有Group
节点的集合中挑选一个随机节点:
MATCH (x:Group)
WITH datetime() AS dt, apoc.coll.randomItem(COLLECT(x)) AS g
CREATE (u:User {
id: apoc.create.uuid(),
firstName: $firstName,
username: $username,
phoneNumber: $phoneNumber,
createdAt: dt,
updatedAt: dt,
role: 'USER'
})-[:MEMBER_OF]->(g)
RETURN u