[英]Get relationship nodes by Variable length relationships in Neo4j using Neo4jClient
我使用Neo4jClient,我想通过可变长度关系(n:Users {id:1})-[r:FOLLOW*1..4]-(m:Users) RETURN r
获取关系属性(n:Users {id:1})-[r:FOLLOW*1..4]-(m:Users) RETURN r
如何获取具有属性的节点关系,例如:
Node[0]{id:1,name:"Oliver Stone"}
Node[1]{id:2,name:"Charlie Sheen"}
Node[2]{id:3,name:"Martin Sheen"}
Node[3]{id:4,name:"TheAmericanPresident"}
I should know , what is attribute relation between Node[0] and Node[2]? (attribute mean "FOLLOW" or "IGNORE")
首先是,如果你使用[r:FOLLOW*1..4]
你已经知道TypeKey
因为它是在你的代码, 如果你想获得TypeKey
为[r*1..4]
那么你可以使用下面的代码,主要的变化是我们将R
作为IEnumerable<RelationshipInstance<object>>
带回了,而不仅仅是直接的RelationshipInstance<object>
。
var query = Client.Cypher
.Match("(n:User)-[r*1..4]-(m:User)")
.Where((UserEntity n) => n.Id == 1)
.Return((n, r, m) => new
{
N = n.As<UserEntity>(),
M = m.As<UserEntity>(),
R = r.As<IEnumerable<RelationshipInstance<object>>>() //<-- IEnumerable<T>
});
var res = query.Results;
foreach (var item in res.ToList())
foreach (var relationshipInstance in item.R)
Console.WriteLine("({0})-[:{1}]-({2})", item.N.Id, relationshipInstance.TypeKey, item.M.Id);
现在,假设您具有以下设置:
(Node:1)-[:IGNORE]->(Node:2)->(:FOLLOW)->(Node:3)
运行上面的代码将获得以下输出:
(1)-[:IGNORE]-(3)
(1)-[:FOLLOW]-(3)
你真的不知道为了什么,和你有矛盾的类型。 假设您是沿着实际路线而不只是名称(我意识到可能并非如此),我们需要更改查询的更多位。
如果您回过头来查看RelationshipInstance
,您将看到它具有两个属性: EndNodeReference
和StartNodeReference
,您还将注意到,这些对象的Id
属性与您在对象中拥有的任何ID没有任何关系。 该Id
在这种情况下,涉及到实际的Neo4j标识。 为了从中获取有意义的数据,我们需要获取该ID,这意味着使用Node<T>
。 理想情况下,我们不想这样做,但是目前我不知道有任何其他方法来获取路线。
var query = Client.Cypher
.Match("(n:User)-[r*1..4]-(m:User)")
.Where((UserEntity n) => n.Id == 1)
.Return((n, r, m) => new
{
N = n.As<Node<UserEntity>>(), //<-- Node<T>
M = m.As<Node<UserEntity>>(), //<-- Node<T>
R = r.As<IEnumerable<RelationshipInstance<object>>>()
});
foreach (var item in res.ToList())
foreach (var relationshipInstance in item.R)
Console.WriteLine("({0})-[:{1}]-({2})", item.N.Data.Id, relationshipInstance.TypeKey, item.M.Data.Id);
现在,您已经获得了关系的所有相关数据,将它们组合在一起。 如果查看Node<T>
实例之一( N
或M
),您将看到一个.Reference
属性,它将与RelationshipInstance
上的.*NodeReference
属性匹配,利用该信息,您可以构建实际的按关系的TypeKey
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.