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

neo4jClient使用参数创建具有动态标签的节点

史高阳
2023-03-14

我正在开发一个应用程序,让用户能够构建自己的图形。我一直在为所有查询和创建使用参数。但当我想让用户能够创建一个节点时,他们也可以根据自己的需要给它添加标签(遵守neo4j对空字符串标签的限制)。如何参数化这种类型的事务

我试过这个:

.CREATE("(a:{dynamicLabel})").WithParams(new {dynamicLabel = dlabel})... 

但这会导致neo的语法错误。我很想连接,但担心这可能会给我的应用程序带来注入风险。

我很想建立我自己的类,读取预期的字符串并拒绝任何类型的neo语法,但这会限制我的用户,我宁愿不这样做。

共有3个答案

茹高义
2023-03-14

我拼命寻找,终于找到了。你可以这样做:

// create or update nodes with dynamic label from import data
WITH "file:///query.json" AS url
call apoc.load.json(url) YIELD value as u
UNWIND u.cis as ci
CALL apoc.merge.node([ ci.label ], {Id:ci.Id}, {}, {}) YIELD node
RETURN node;

JSON如下所示:

{
   "cis": [
     {
       "label": "Computer",
       "Id": "1"
     },
     {
       "label": "Service",
       "Id": "2"
     },
     {
       "label": "Person",
       "Id": "3"
     }
   ],
   "relations": [
     {
       "end1Id": "1",
       "Id": "4",
       "end2Id": "2",
       "label": "USES"
     },
     {
       "end1Id": "3",
       "Id": "5",
       "end2Id": "1",
       "label": "MANAGED_BY"
     }
   ]
 }
井洲
2023-03-14

如果您使用的是Java客户机,那么您可以这样做。

        Node node = GraphDatabaseService.createNode();

        Label label = new Label() {                 
            @Override
            public String name() {
                return dynamicLabelVal;
            }
        };

        node.addLabel(label);

然后可以使用LabelCache,这将避免为每个节点创建标签对象

崔宇
2023-03-14

有一个开放的neo4j问题4334,这是一个功能请求,用于在CREATE期间添加参数化标签的能力。所以,这还不可能。

该问题包含一条注释,建议使用硬编码标签生成CREATE语句,这将起作用。不幸的是,它的性能不如使用参数(在这种情况下应该支持它)。

 类似资料:
  • 我想使用Neo4jClient创建一些Person和Books类型的节点。 要做到这一点,我有这样的班级人员: 为了创建节点,我写了这样的东西: (客户- 当我在Neo4j web界面中看到创建的节点时,没有为创建的节点分配标签。我以为那个人就是标签。如何使用Neo4jClient为创建的节点分配标签。我想要像“Match(n:Person)”这样的查询,但是因为没有创建类型,所以不可能这样做。

  • 我想创建一个java程序,它接受动态数量的参数。例如: 其中可能会有所不同。 我使用Commons CLI作为命令行选项解析器。但我找不到一种方法来实现一个接受动态参数数的选项。 setArgs指定选项必须接受的参数数。是否可以指定选项可以接受的最小参数数? 或者我应该使用其他工具来解析命令行选项?

  • 问题内容: 我有一个特定的问题。我有一个包含无效值的表。我需要用大于的先前值替换无效值(此处)。 困难在于,使用Update或insert(游标和update可以做到)对我来说是不合适的。我唯一的方法是使用Select语句。 当我将-函数与when一起使用时,我只会得到一列具有正确值的列。 内容: 预期查询结果: 问题答案: 结果 :

  • 我正在创建一个动态表单。ie基于下拉框中的用户选择。根据下拉选择,我可以有2到20个字段。因此,每次用户更改下拉列表时,我们都可以有各种类型的不同表单字段。 提交url参数。是否可以仅提交可见且与用户选择相关的表单字段当前url字符串正在提交所有值。 对于场景1 当用户从下拉列表中选择“A”时。我们显示firstname和lastname输入字段以及url?fname=fname 情景2 当用户从

  • 问题内容: 我正在尝试从JavaScript创建iframe并用任意HTML填充它,如下所示: 我希望然后包含一个有效的窗口和文档。但是,事实并非如此: console.log(iframe.contentWindow); 空值 我在俯视什么? 问题答案: 设置javascript中新创建的时,除非将该元素插入文档中,否则不会触发HTML解析器。然后更新HTML,将调用HTML解析器并按预期处理属

  • 问题内容: 如何使用JavaScript创建SVG元素?我尝试了这个: 但是,它将创建宽度为零,高度为零的SVG元素。 问题答案: 尝试这个 :