使用SDN Neo4j,只有当具有匹配字段的节点不存在时才可以创建节点吗?因此,例如,我有一个现有节点,可以说标记为“Road”,其值为“N4”。现在我需要创建一个与该节点有关系的新节点,让我们说“驱动器开启”。所以我这样做很好。但是第二次我需要检查标签为“Road”的节点是否已经存在且值为“N4”。如果是,则使新节点指向现有节点,而不是创建值为N4的新Road节点?
我正在尝试使用SDN做相同的事情我认为:
MATCH (root { name: 'root' })
CREATE UNIQUE (root)-[:X]-(leaf { name:'D' })
RETURN leaf
与根节点连接的节点没有名称D,因此创建了一个新节点以匹配模式。
这可以通过某种方式在插入点使用SDN域建模来完成吗?
感谢
答案 0 :(得分:1)
一般情况下,根据需要创建道路可能不是一个好主意吗?
实际上很简单
class Road {
@Indexed(unique=true) String name;
}
class Person {
@Indexed(unique=true) String name;
Road drivesOn;
}
Road r = template.save(new Road("N4")); // does a merge if the road already exists, but of course more expensive
Person p = new Person("Timmy")
p.setDrivesOn(r);
// also merges person if it doesn't exist,
// the default is that there is only one relationship ever between this person and _a_ road.
template.save(p);
答案 1 :(得分:0)
为什么不使用自定义存储库类?您可以重新使用您的密码查询。
public interface LeafRepository extends GraphRepository<Leaf> {
@Query("MATCH (r:{0}) CREATE UNIQUE (r)-[:X]-(leaf { name:'D' }) RETURN leaf")
Leaf createLeaf(Road road);
}
自从我使用SDN已经有一段时间了,但主要想法应该是明确的。如果你想使用Neo4j 2.0,你将不得不使用SDN 3。有关详细信息,请阅读repository tutorial。