如何创建唯一节点即保证属性的唯一性?
您可以在(标签、属性)对上创建unique constraint,这将确保该属性的唯一性。
例如
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
那么你会在结果集中为该列返回一个字符串。
-- 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();
}