假设这样的图表:
您将使用这样的 Gremlin 查询来检索所有用户的所有汽车:
g.v(0).out('HAS_USER').out('HAS_CAR')
现在,让我们将其过滤到红色汽车:
g.v(0).out('HAS_USER').out('HAS_CAR').filter { it.Color == "Red" }
最后,你想要的是用户而不是汽车。最容易想到 Gremlin 就像一个真正的 gremlin(小生物)一样工作。你告诉他跑到用户那里,然后跑到每辆车,然后检查每辆车的颜色。现在你需要他回到他来自的用户那里。为此,我们在查询中放置一个标记,如下所示:
g.v(0).out('HAS_USER').as('user').out('HAS_CAR').filter { it.Color == "Red" }.back('user')
用 Neo4jClient 用 C# 编写这个非常相似:
graphClient
.RootNode
.Out<User>(HasUser.TypeKey)
.As("user")
.Out<Car>(HasCar.TypeKey, c => c.Color == "Red")
.BackV<User>("user")
这里唯一的区别是您需要分别使用BackE
orBackV
来表示边和顶点,而不是 just Back
。这是因为在 C# 的静态类型世界中,我们需要使用不同的方法名称才能返回不同的枚举器类型。
我希望这会有所帮助!:)
——泰坦