当前位置: 首页 > 知识库问答 >
问题:

Neo4j在创建之前是否检查节点是否存在?

茅星华
2023-03-14

我有一种感觉,我在这件事上完全错了。但无论如何。

我有一个sql数据库,它本质上是一个有目的的非规范化表,我构造这个表是为了使这项任务对我来说更容易,所以我可以从一个表中获取内容。

我有一张成双成对的桌子,像这样:

user_lo | user_hi | something_else | other stuff
1000    | 1234    | 1231251654     | 123
1050    | 1100    | 1564654        | 45648
1080    | 1234    | 456444894648   | 1

等等

所以对于我的neo4j图数据库,我希望每个用户ID作为一个节点,其他的东西不是太重要,但基本上是关系中的东西。

我只希望每个用户有一个节点,所以我的感觉是,如果我这样做:

while (rs.next()) {
    node_lo = db.createNode();
    node_lo.setProperty("user_id", rs.getInt(1));
    node_hi = db.createNode();
    node_hi.setProperty("user_id", rs.getInt(2));
}

当我们第二次添加user_id1234的节点时,它将只创建一个新节点,但我想要的是它只抓取这个节点,而不是创建它,这样我就可以将它添加到1080的关系中案件。

那么这样做的方法是什么呢?

共有3个答案

淳于星宇
2023-03-14

您可能需要使用Neo4j提供的UniqueNodeFactory。

    public Node getOrCreateUserWithUniqueFactory( String username, GraphDatabaseService graphDb )
{
    UniqueFactory<Node> factory = new UniqueFactory.UniqueNodeFactory( graphDb, "UserNodes" )
    {
        @Override
        protected void initialize( Node created, Map<String, Object> properties )
        {
            created.setProperty( "id", properties.get( "id" ) );
        }
    };

    return factory.getOrCreate( "id", id );
}
富凯风
2023-03-14

使用索引进行搜索,如果没有找到结果,则创建一个新索引。

Index<Node> userIndex = graphDatabaseService.index().forNodes('UserNodes');

IndexHits<Node> userNodes = userIndex.get('id', 1234);

if(!userNodes.hasNext()){
    //Create new User node
} else {
    Node userNode = userNodes.next();
}

这是你要找的手术类型吗?

佟英武
2023-03-14

你看过CREATE UNQUE吗?

如果你不能使用密码,也许你可以使用唯一的节点?

 类似资料:
  • 我正在处理一个Spring BootNeo4j应用程序 在保存新密码之前,如何编写自定义密码来检查Priviledge是否存在 UserRole域:@NodeEntity公共类UserRole{ 特权域:

  • 我从我的网络商店API调用中获取XML,其结构非常像下面的示例: 其中有更多的参数,数量取决于许多外部因素。我正在尝试获取用户名,当id“111”和id“112”的值是我要查找的值时 上述代码按预期返回“userOne”和“userTwo”。 问题是,Id“111”要么有值“Param 1 is on”要么什么都没有,如果没有值,它就不会显示在XML中。所以我需要一个表达式来检查id为“111”的

  • 我有以下课程: 我正在尝试实现一种方法: 这将检查是否是的祖先(任何深度,直到根)。 我需要一个密码查询。

  • 我想向文件输入一些内容,但我想首先检查是否存在具有我想要创建的名称的文件。如果是这样,我不想创建任何文件,即使文件是空的。 我的尝试 有什么办法可以做我想做的事吗?

  • 问题内容: 我有一个嵌入了数据库的桌面应用程序。当我执行程序时,我需要检查特定的表是否存在,如果不存在则创建它。 给我的数据库一个名为conn的Connection对象,我该如何检查呢? 问题答案: 您可以使用可用的元数据: 有关更多详细信息,请参见此处。还要注意JavaDoc中的注意事项。

  • 问题内容: 我正在尝试检查$ _POST是否存在,如果存在,则在另一个字符串中打印它,如果不存在,则根本不打印。 像这样的东西: 任何帮助将是巨大的! 问题答案: