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();
}