Neo4j匹配特定类型节点的随机单个节点



我有一个用于组的节点,用户是该节点的成员。我想在用户注册时随机将其自动分配给一个组。有没有一种方法可以随机匹配某一类型的单个节点。

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

最新更新