0

ラベル「City」のプロパティ「id」が存在するようにスキーマを作成する必要があります。ラベルタイプ「City」で作成するすべてのノードで、「id」の自動インクリメント値を作成する必要があります。私はneo4jのPHPライブラリを使用しています:

Neo4j でこのタスクの自動インクリメントを見たことがありますが、php または特定の戦略によって実行する方法がありません。

4

2 に答える 2

0

You could write an unmanaged extension in Java (or other JVM language) that uses a TransactionEventHandler to manage counters and deploy it to your Neo4j server.

于 2014-04-20T15:10:20.253 に答える
0

neo4jには自動インクリメントがないため、これは技術的にあなたが求めたものではありません(自動インクリメントまたは数値ではないため)...しかし、これはランダム化された文字列を次のように生成することで同じ問題を解決した方法ですID

$length別のデフォルトの長さが必要な場合は変更$triesします。無限ループを防ぐために使用されます...(この関数は、長さ5の一意のIDを3回作成しようとし、次に6つの長いIDを作成しようとします...

function makeNewID($client, $length = 5, $trys = 0)
   {
      //chars to pick from
      $charlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
      $strlen = strlen($charlist)-1;

      //alpha numeric generated in this for statement
      for ($newID = '', $i = 0; $i < $length; $newID .= $charlist[mt_rand(0, $strlen)], ++$i);
      //query the database to see if the 'new id exists'
      $query = new Everyman\Neo4j\Cypher\Query($client, 'MATCH (n{id:"'.$newID.'"}) RETURN n.id LIMIT 1');
      $result = $query->getResultSet();
      if(!empty($result[0]['x']->getProperty('id')))
      {
        $trys++;
        if($trys >= 3){$length++; $trys = 0;}
        $newID = makeNewID($Neo, $length, $trys);
      }
      return $newID;
   }

PS。コードの抽象化レイヤーを削除し、実際の neo4jphp lib のコードに置き換えましたが、テストしていません。

于 2014-05-19T00:50:06.430 に答える