gpt4 book ai didi

performance - Neo4j 查询 : conditional match

转载 作者:行者123 更新时间:2023-12-02 04:41:07 26 4
gpt4 key购买 nike

我有这个模型:

enter image description here

  • Bob 和 Alice 是用户
  • CVI 是一家诊所
  • 冥王星是一种动物

用户有一个名为 identityId (CONSTRAINT UNIQUE) 的属性来标识用户。

我只想选择具有给定 ID 的用户,前提是它是用户本身(相同的 identityId),或者如果 Alice 和 Bob 之间存在 SHARED_WITH 关系。

就性能而言,下面的查询是最佳查询吗?

MATCH (u:User) 
WHERE id(u) = {id} AND ((u.identityId = {identityId})
OR ((:User { identityId: {identityId} }) - [:OWNS] -> (:Clinic) <- [:SHARED_WITH] - (u)))
RETURN u

示例

  • 爱丽丝 { id: 6, identityId: "5678"}
  • 鲍勃 { id: 3, identityId: "1234"}
  • 马洛里 { id: 5, identityId: "2222"}

第一种情况:来电者是Alice

MATCH (u:User) 
WHERE id(u) = 6 AND ((u.identityId = "5678")
OR ((:User { identityId: "5678" }) - [:OWNS] -> (:Clinic) <- [:SHARED_WITH] - (u)))
RETURN u

你是爱丽丝

第二种情况:来电者是Bob

MATCH (u:User) 
WHERE id(u) = 6 AND ((u.identityId = "1234")
OR ((:User { identityId: "1234" }) - [:OWNS] -> (:Clinic) <- [:SHARED_WITH] - (u)))
RETURN u

你是爱丽丝

第三种情况:来电者是Mallory

MATCH (u:User) 
WHERE id(u) = 6 AND ((u.identityId = "2222")
OR ((:User { identityId: "2222" }) - [:OWNS] -> (:Clinic) <- [:SHARED_WITH] - (u)))
RETURN u

u为NULL(mallory既不是用户也不是与Alice共享其用户的用户)

最佳答案

考虑到您的补充说明:

// Get user by id
MATCH (I:User) WHERE id(I) = {id}
// Whom with given {identityId} shard with him
OPTIONAL MATCH (U:User {identityId: {identityId} })
-[:OWNS]->()<-[:SHARED_WITH]-
(I)
WITH I, COUNT(U) as UC
// Test user {identityId}
// or there are those who with {identityId} are with him shares
WHERE I.identityId = {identityId} OR UC > 0
RETURN I

关于performance - Neo4j 查询 : conditional match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37520063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com