gpt4 book ai didi

java - 创建/设置来自 Neo4j 中参数对象的属性

转载 作者:行者123 更新时间:2023-11-30 08:01:07 25 4
gpt4 key购买 nike

在查询中,我提供以下参数:

id : 'some unique ID',
used : [an array of md5 checksums]

使用以下查询:

MATCH (a {id:{id}}) , (b)
WHERE b.md5 IN {used}
CREATE UNIQUE (a)-[]->(b)

一切都很棒。如果used数组中有10个MD5校验和,则节点“a”将与它们建立10个关系。酷。

但现在假设我需要向该关系添加一个属性 - 该属性将取决于节点 b。

现在我有一个额外的参数,一个对象,如下所示:

info : {
'5fb1be1279031c1f1c65a928eb823e51': 'yolo',
'0aab9f8e81684ec778f8c0c5717f37c2': 'swag',
...
}

此对象中的 MD5 键与 used 数组中的 MD5 字符串匹配。

我的第一 react 是这样做:

MATCH (a {id:{id}}) , (b)
WHERE b.md5 IN {used}
CREATE UNIQUE (a)-[{ meme:{info}[b.md5] }]->(b)

因为那行不通。我收到错误:

{ [neo4j.ClientError: [Neo.ClientError.Statement.InvalidType] Expected e1701806eda7d3ab52b143cc03d94e75 to be a java.lang.Number, but it was a java.lang.String] message: '[Neo.ClientError.Statement.InvalidType] Expected e1701806eda7d3ab52b143cc03d94e75 to be a java.lang.Number, but it was a java.lang.String', neo4j: { code: 'Neo.ClientError.Statement.InvalidType', message: 'Expected e1701806eda7d3ab52b143cc03d94e75 to be a java.lang.Number, but it was a java.lang.String' }, name: 'neo4j.ClientError' }

如果有人可以提供帮助,我将非常感激,因为我完全陷入了困境:/

最佳答案

仔细阅读了Stefan的博客后,我发现我可以使用以下Cypher来实现我所需要的。这并不漂亮,但除非有一种比 FOREACH/CASE 技巧更简单的有条件地创建东西的方法,否则它必须这样做:

首先将键/值对对象拆分为两个数组:

> fileMD5  : ['5fb1be1279031c1f1c65a928eb823e51','0aab9f8e81684ec778f8c0c5717f37c2'..]
> fileInfo : ['yolo','swag'...]

然后将表达式写成:

MATCH (e:event {id:{id}}),(r:resource)
WHERE r.md5 IN {used}
FOREACH(
idx in RANGE(0,SIZE({fileMD5})-1) |
FOREACH(
filePath IN CASE WHEN r.md5 = {fileMD5}[idx] THEN [{fileInfo}[idx]] ELSE [] END |
CREATE UNIQUE (r)-[:USED_BY {filePath:filePath }]->(e)
)
)

我8小时前写了这个问题,这意味着这几行字花了8个小时的时间才得到。我希望其他人发现它有用:P

编辑:关于它如何/为什么工作的一些解释......

第一个 FOREACH 迭代从 0 到(键或值数组的长度 -1)的 RANGE,结果为 idx 变量。这是同时迭代两个相同长度数组的常见技巧。

第二个 FOREACH 有点复杂。它迭代一个由 CASE 创建的数组,结果称为 filePath。然而,CASE 只返回一个其中没有任何内容的数组 [],或者一个包含我们想要在 CREATE 中设置的值的数组。因此,根据具体情况,FOREACH 要么执行一次操作,要么根本不执行任何操作。

这个案例非常简单。当索引提取出与我们想要的匹配的键 (r.md5 = {fileMD5}[idx]) 时,它会返回一个包含一个值的数组 - 值数组中的值使用与键数组中匹配的索引相同的索引.

关于java - 创建/设置来自 Neo4j 中参数对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com