Neo4j服务器插件基本问题

时间:2014-11-09 17:56:33

标签: neo4j

我正在使用Neo4J v2.1.5并创建服务器插件。

  1. 如何创建唯一节点,即保证属性的唯一性?
  2. 插件生命周期中是否有一个钩子,可以创建约束和索引?
  3. 返回节点将返回完整的数据库。如何仅将节点或pojo列表作为JSON返回?是否有任何可用的实例或说明?
  4. 我使用的是Java API,而不是Cypher。

2 个答案:

答案 0 :(得分:2)

  

如何创建唯一节点,即保证属性的唯一性?

您可以在(标签,属性)对上创建unique constraint,以确保该属性的唯一性。

e.g。

CREATE UNIQUE CONSTRAINT ON :Person(name)

确保您不能拥有两个具有相同名称的人员节点。如果您想从Java API中执行此操作,您可以执行like this

try ( Transaction tx = graphdb.beginTx() )
{
    graphdb.schema()
        .constraintFor( DynamicLabel.label( "Person" ) )
        .assertPropertyIsUnique( "name" )
        .create();
    tx.success();
}
  

在插件生命周期中是否存在可以创建约束和索引的钩子?

您可以在事务中执行此操作,但IIRC只能为每个事务创建一个索引/约束。

  

返回节点将返回完整的数据库。如何只返回节点或pojo列表?在那儿   任何有关代表的工作实例或解释?

你的意思是来自密码?只返回一个节点的简单查询是:

MATCH (n)
RETURN n
LIMIT 1

在cypher land中,它将返回一个节点在其上的属性的映射。如果你想获得更具体的东西,你可以试试这个:

MATCH (n:Person)
RETURN n.name AS personName
LIMIT 1

那么你将在结果集中获得该列的String。

- 更新Java API -

从Java API中,您可以编写自己的遍历,它将返回“节点”和“关系”对象。从那些你必须提取你感兴趣的任何属性。

try ( Transaction tx = graphDatabaseService.beginTx() )
{
    ResourceIterable<Node> people = GlobalGraphOperations.at( graphDatabaseService ).getAllNodesWithLabel( DynamicLabel.label( "Person" ) );

    for ( Node node : people )
    {
        String name = (String) node.getProperty( "name" );
    }

    tx.success();
}

答案 1 :(得分:0)

嗨,使用密码,我可以为你提供一些东西,

问如何创建一个独特的节点,即保证一个属性的唯一性? 答。 首先选择一个可能对该节点唯一的属性,与关系数据库系统中的主键相同, 即同上 现在你合并创建一个节点, MERGE(你:用户{Id:1}) 设置u.Name ='查理' 回来你 如果具有Id的用户不存在,它将创建它, 然后使用set Clause,你也可以设置其他属性或空洞对象,

Q返回节点将返回完整的数据库。如何仅将节点或pojo列表作为JSON返回?是否有任何可用的实例或说明? 答。如果您传递唯一ID并尝试搜索,则匹配的方式相同,只会返回该特定节点,即 匹配(你:用户{Id:1})返回你

创建这样的Id,我建议你使用像C#编程的lunguaze中创建的GUID, 但是对于neo4j 3.x,你也使用了自动增量的推进器。