【发布时间】:2014-04-19 12:04:24
【问题描述】:
我必须创建架构,以便标签“City”有属性“id”。 我必须在我创建的标签类型为“City”的每个节点上创建“id”的自动增量值。我正在使用neo4j的PHP库:neo4jphp
我已经看到了这个任务Auto Increment in Neo4j,但它没有办法通过 php 或特定策略来完成。
【问题讨论】:
标签: neo4jphp php neo4j auto-increment neo4jphp
我必须创建架构,以便标签“City”有属性“id”。 我必须在我创建的标签类型为“City”的每个节点上创建“id”的自动增量值。我正在使用neo4j的PHP库:neo4jphp
我已经看到了这个任务Auto Increment in Neo4j,但它没有办法通过 php 或特定策略来完成。
【问题讨论】:
标签: neo4jphp php neo4j auto-increment neo4jphp
您可以用 Java(或其他 JVM 语言)编写 unmanaged extension,使用 TransactionEventHandler 来管理计数器并将其部署到您的 Neo4j 服务器。
【讨论】:
从技术上讲,这不是您所要求的(因为它不是自动增量或数字),因为 neo4j 没有自动增量......但这就是我通过生成一个随机字符串作为 ID
改变$length如果你想要一个不同的默认长度,$tries只是用来防止无限循环......(这个函数尝试创建一个长度为5的唯一ID 3次,然后尝试创建6个长身份证等...
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 代码替换了它,但我还没有测试过。
【讨论】: