Neo4j匹配某类节点的随机单个节点
Neo4j match a random single node of a certain type of nodes
我有一个群组节点,用户是其中的成员。我想在用户注册时随机将用户自动分配到一个组。有没有办法随机匹配某个类型的单个节点。
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 关系。最终可能会有其他考虑,但现在我想随机 select 一组然后创建关系。
您可以使用 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
我有一个群组节点,用户是其中的成员。我想在用户注册时随机将用户自动分配到一个组。有没有办法随机匹配某个类型的单个节点。
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 关系。最终可能会有其他考虑,但现在我想随机 select 一组然后创建关系。
您可以使用 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