我正在使用Neo4J v2.1.5并创建服务器插件。
我使用的是Java API,而不是Cypher。
答案 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,你也使用了自动增量的推进器。