在继续使用 neo4j 之前,我试图了解基础知识。喜欢查询方面,但现在尝试使用 neo4jclient 删除并卡住了。
简单设置
root-[:has_user]->user 和 user-[:friends_with]->friend`
对于 Id 为 1 的用户,我想从 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 日更新
得到它的工作。我首先使用稳定的 1.8 由 Neo4J 实例更新。我认为最新的 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();
}