私は、cypherを使用してneo4jで一連のデータノードを維持しようとしています。 私は現在の日付とタイムスタンプを持つノードを作成しています。また、最新のノードと最新のノードとの間に接続を作成する必要があります。 ノードが既に存在するかどうかチェックして、最新の日付のノードを取得し、 (latest:Node)<-[:next]-(prev:Node)
を作成する必要があります。 ノードが存在しない場合は、現在の日付のノードを作成するだけです。 ありがとう最新の日付を持つneo4jノード(存在する場合)を取得し、現在のノードとの接続を作成するにはどうすればよいですか?
答えて
最新のノードを指している何らかの種類のヘッドノードがある場合は、これを維持する方が簡単です。これは、リストに含まれるノードの数にかかわらず、最新のノードを高速に見つけるのに役立つだけでなく、このリストに対する同時変更の調整にも役立ちます。
と仮定しましょう:最新のノードとの最新の関係を持つヘッドノードを考えてみましょう。同時クエリが実行されているときに競合状態を避けるために、最新のノードをチェックする前に:Headノードをロックする必要があります。
これを行う最も簡単な方法は、APOC Proceduresとcall apoc.lock.nodes()
です。
// assume `latest` node with latest timestamp is already created and in scope
WITH latest
MATCH (head:Head)
CALL apoc.lock.nodes([head]) // avoid race conditions
OPTIONAL MATCH (head)-[r:LATEST]->(prev)
WITH latest, head, r, prev // this + the WHERE needed to halt query if latest isn't newer than prev
WHERE COALESCE(prev.timestamp, 0) < latest.timestamp
DELETE r // update :LATEST relationship
MERGE (head)-[:LATEST]->(latest)
WITH latest, prev
WHERE prev IS NOT NULL // protects from error in case when prev is null
MERGE (latest)<-[:next]-(prev)
は、新しく作成されたノードが今最も最近のノードであるとき、これは動作しますが、それはprev
より新しいないノードのために動作しないことに注意してください。この場合、それらはリストに追加されません。リスト内の適切な場所にノードを挿入するためにクエリを変更する必要があります。
ありがとう! 1回目のノードを作成する場合、つまり前のノード(最新)が存在しない場合はどうなりますか?また、多くのノードが存在しないので、複雑さは問題ではありません。 Thanks – Neo
前のノードがなくてもクエリーが動作するはずです。試してみてください(ヘッドノードが必要です: – InverseFalcon
ありがとう#InverseFalcon)。 – Neo
- 1. エンドノードが存在する場合にノードとリレーションシップを作成する(そうでなければ最初のノードのみを作成する)
- 2. 存在する場合は子ノードを取得するPythonで作成する場合
- 3. 現在のノードの親ノード名を取得する方法は?
- 4. 新しいneo4jノードとJavaの既存ノードとの関係を作成する
- 5. サイファーを使用してノードが存在しない場合のノードの作成
- 6. ファイルが存在する場合にのみ更新するノード
- 7. 現在の金曜日の現在の日付を現在の日付から取得するには
- 8. Xpath:存在する場合、ノードの隣にノードを見つける
- 9. CloudFormationスクリプトで現在の日付を取得するにはどうすればよいですか?
- 10. C++で現在の日付を取得するにはどうすればよいですか?
- 11. elmで現在の日付を取得するにはどうすればよいですか?
- 12. SQL Statementで現在の日付+4時間を取得するにはどうすればよいですか?
- 13. 値が存在しない場合の空白ノードの作成
- 14. ノードredでは、現在のノードのプロパティをプログラムで取得する方法は?
- 15. GNUスクリーン接続が存在する場合、作成しない場合は
- 16. 変数を現在の日付と日付に設定するにはどうすればいいですか?
- 17. 現在のノードと現在のノードの間にあるすべてのノードをcurrent()なしで取得しますか?
- 18. VBAの現在の日付と指定した日付との差異を取得するにはどうすればよいですか?
- 19. 新しいファイルが存在する場合、.htaccessチェックを行うにはどうすればよいですか?
- 20. NSDateから現在までの日数を取得するにはどうすればよいですか?
- 21. 単一リンクリストの現在のノードを削除するにはどうすればよいですか?
- 22. 現在のノード変数の親ノード要素を取得する方法は?
- 23. ElasticSearch - 現在の日付と時刻を取得するには?
- 24. iPhoneのバックグラウンドモードで現在の場所を取得するにはどうすればよいですか?
- 25. データベースに保存されている日付と現在の日付との差異を取得する
- 26. Android:新しいアクティビティが現在のアクティビティと同じ場合、現在のアクティビティを強制終了するにはどうすればよいですか?
- 27. 入力された日付範囲に存在しない場合は、最も近い日付を取得
- 28. Androidの日付ピッカー(現在の日付を取得する)
- 29. 1日前に現在の時刻を取得するにはどうすればよいですか?
- 30. は、私は現在、PHPはそうのような現在の時刻/日付を取得した日付
作成する前に確認した内容について詳細を共有できますか?基本的に、私はどこかに 'OPTIONAL MATCH(x:SomeLabel)の行に沿ってxがどこにあるのかxはNULLではありません... ' –