在尝试使用neo4j继续前进的基础知识之前,我正在努力学习。喜欢查询方面,但现在试图删除使用neo4jclient和卡住。如何使用Neo4jClient删除关系
简单设置
根 - [:has_user] - >用户 和 用户 - [:friends_with] - > friend`
对于具有1的ID的用户我想删除从指定的ID == 2.用户1不再是朋友与用户2 :(
总之,使用neo4jclient我第一次检查,以确保用户的朋友在第一时间与此:
if (client.Cypher.Start("root", client.RootNode)
.Match("root-[:HAS_USER]->user-[:FRIEND]->friend")
.Where((UserNode user, UserNode friend) => user.Id == 1 && friend.Id == id)
.Return<Node<UserNode>>("user")
.Results
.Count() == 1)
{
现在我试图删除:
client.Cypher.Start("root", client.RootNode)
.Match("root-[:HAS_USER]->user-[r]->friend")
.Where("user.Id = 1")
.And()
.Where("friend.Id = " + id)
.And()
.Where(string.Format("type(r) = 'FRIEND'"))
.Delete("r");
}
没有错误,但关系仍然存在。有任何想法吗?
更新2012年11月12日
得到它的工作。我首先通过Neo4J实例更新了稳定的1.8。我认为最新的neo4jclient和neo4j服务器没有一起工作。我首先根据id获得用户节点,然后从该节点测试节点是否存在关系,然后才能将其删除。下面的代码:
var currentUserNode = client.Cypher.Start("root", client.RootNode)
.Match("root-[:HAS_USER]->user")
.Where((UserNode user) => user.Id == 1)
.Return<Node<UserNode>>("user")
.Results.Single();
if (currentUserNode.StartCypher("user")
.Match("user-[r]->friend")
.Where("friend.Id = " + id).And()
.Where("type(r) = 'FRIEND'")
.Return<Node<UserNode>>("user")
.Results
.Count() == 1)
{
currentUserNode.StartCypher("user")
.Match("user-[r]->friend")
.Where("friend.Id = " + id).And()
.Where("type(r) = 'FRIEND'")
.Delete("r").ExecuteWithoutResults();
}
如果您在控制台中运行纯密码查询它是否工作? – ulkas
好主意,ulkas,我会尝试 – rball