Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何查找节点子集并返回其id';她在塞弗?_Neo4j_Cypher_Spring Data Neo4j - Fatal编程技术网

Neo4j 如何查找节点子集并返回其id';她在塞弗?

Neo4j 如何查找节点子集并返回其id';她在塞弗?,neo4j,cypher,spring-data-neo4j,Neo4j,Cypher,Spring Data Neo4j,我正在尝试编写一个密码查询,它允许您以字符串形式传入一组名称,以查找匹配的节点,然后返回每个节点的id。我一直在使用该语言,并提出了以下有缺陷的查询: START person=node(*) WHERE HAS (person.name) WITH FILTER (name IN ['ryan','mike'] : person.name=name) AS matchedPersons RETURN ID(matchedPersons) Expected `matchedPersons` t

我正在尝试编写一个密码查询,它允许您以字符串形式传入一组名称,以查找匹配的节点,然后返回每个节点的id。我一直在使用该语言,并提出了以下有缺陷的查询:

START person=node(*)
WHERE HAS (person.name)
WITH FILTER (name IN ['ryan','mike'] : person.name=name) AS matchedPersons
RETURN ID(matchedPersons)

Expected `matchedPersons` to be a node or relationship, but it was ``
如果我返回
matchedPersons
而不是
ID(matchedPersons)
,则得到以下结果:

+------------------------------------------+
| matchedPersons                           |
+------------------------------------------+
| ["ryan"] |
| ["mike"] |
| []                                       |
+------------------------------------------+
3 rows

在我的数据库中,我有三个人节点,它们的名字是“ryan”、“mike”和“lucy”。我想获取与FILTER子句中定义的集合中的姓名匹配的人员的ID。如何获取姓名与集合中至少一个姓名匹配的每个人的ID?

有一种更简单的方法编写此查询:

neo4j-sh (?)$  match (p:Person) where p.name in ['ryan', 'mike'] return id(p);
+-------+
| id(p) |
+-------+
| 14680 |
| 14681 |
+-------+
2 rows
96 ms
(在一些本地数据上进行了测试,因此您的ID将有所不同)


好的,那就是怎么做的。但问题是,您可能不应该查看、处理或关心单个节点的ID。节点ID应该被视为一个实现细节。它们为您所做的只是提供一个唯一的标识符,但您不应该对它们的价值做任何假设。不要假设它们永远不会改变,或者它们总是以某种方式排序。如果您需要一个具有实际意义的标识符,请使用您自己的。

有趣的阅读,不过我正在获取ID,以便使用Neo4JTemplate类建立关系。该类中的createrelationship方法调用节点id。不熟悉该类或您在该类中尝试执行的操作。我所能建议的是,如果有另一种方法处理
节点
对象而不是id,那么这可能更可取,这样您就可以让其他人担心id的细节。我尽量不惹他们,因为10次中有9次他们不是你想要的。由于您使用它们的方式,您可能会出现异常,我不确定。这些是节点的id,您可以使用
template.query()
方法,通过此查询将集合替换为命名参数并返回p,然后您的节点
template.query(“match(p:Person)where p.name in{names}返回p”,map(“姓名”,asList(“ryan”,“mike”))。到(Node.class);
Hey@FrobberOfBits你介意给我发封电子邮件吗michael@neo4j.org?@MichaelHunger我给你发了封电子邮件。