获取具有特定多重关系的节点节点的 Cypher / Neo4j 查询
Cypher / Neo4j query that gets a nodes nodes with specific multiple relationships
我正在开发应用管理器应用。它具有标签为 Item 的项目和标签为 Tags 的标签。项目可以有多个标签,最多五个。
(i:Item)-[:HAS]->(t:Tag)
我正在使用 php 来执行此操作,因此理想情况下我将能够连接查询:
$tags = $this->getParam("tags"); // split by comma or some separator
if ($tags != null) {
$arrayTags = explode(";", $tags ,5);
$queryAddTagSpecifiers = "";
for ($i=0;$i<count($arrayTags);$i++) {
$queryAddTagSpecifiers.= " MATCH (t:Tag {name:'".$arrayTags[$i]."'})<-[:HAS]-(i:Item)";
}
$query = "MATCH (t:Tag)<-[:HAS]-(i:Item)-[:OWNED]->(u:User)
".$queryAddTagSpecifiers."
WHERE u.id='" . $this->userId . "' RETURN i";
echo $query;
}
我正在尝试编写查询 MATCH 以获取具有多个标签的项目。对于单个标签,它有效。
我尝试了多种变体:
MATCH (i:Item)-[:OWNED]->(u:User) MATCH (t:Tag {name:'house'})<-[:HAS]-(i:Item) MATCH (t:Tag {name:'image222'})<-[:HAS]-(i:Item) WHERE u.id='1640793954DANYXV4RW8EFZLIJNUMC' RETURN i
我也用过WHERE t.name='house AND t.name='image222'
但没有成功,可能是因为它们是互斥的。
感谢任何帮助。
如果您有名称为 'Tag1'、'Tag2'、'Tag3'、'Tag4' 的标签,并且您想要查找同时具有 'Tag1' 和 'Tag3',你可以做到
WITH ['Tag1','Tag3'] AS tags
MATCH (i:Item)
WHERE ALL(tag IN tags WHERE tag IN [(i)-[:HAS]->(itemTag) | itemTag.name])
RETURN i
其中这部分
[(i)-[:HAS]->(itemTag) | itemTag.name]
是特定项目的标签集合
我正在开发应用管理器应用。它具有标签为 Item 的项目和标签为 Tags 的标签。项目可以有多个标签,最多五个。
(i:Item)-[:HAS]->(t:Tag)
我正在使用 php 来执行此操作,因此理想情况下我将能够连接查询:
$tags = $this->getParam("tags"); // split by comma or some separator
if ($tags != null) {
$arrayTags = explode(";", $tags ,5);
$queryAddTagSpecifiers = "";
for ($i=0;$i<count($arrayTags);$i++) {
$queryAddTagSpecifiers.= " MATCH (t:Tag {name:'".$arrayTags[$i]."'})<-[:HAS]-(i:Item)";
}
$query = "MATCH (t:Tag)<-[:HAS]-(i:Item)-[:OWNED]->(u:User)
".$queryAddTagSpecifiers."
WHERE u.id='" . $this->userId . "' RETURN i";
echo $query;
}
我正在尝试编写查询 MATCH 以获取具有多个标签的项目。对于单个标签,它有效。
我尝试了多种变体:
MATCH (i:Item)-[:OWNED]->(u:User) MATCH (t:Tag {name:'house'})<-[:HAS]-(i:Item) MATCH (t:Tag {name:'image222'})<-[:HAS]-(i:Item) WHERE u.id='1640793954DANYXV4RW8EFZLIJNUMC' RETURN i
我也用过WHERE t.name='house AND t.name='image222'
但没有成功,可能是因为它们是互斥的。
感谢任何帮助。
如果您有名称为 'Tag1'、'Tag2'、'Tag3'、'Tag4' 的标签,并且您想要查找同时具有 'Tag1' 和 'Tag3',你可以做到
WITH ['Tag1','Tag3'] AS tags
MATCH (i:Item)
WHERE ALL(tag IN tags WHERE tag IN [(i)-[:HAS]->(itemTag) | itemTag.name])
RETURN i
其中这部分
[(i)-[:HAS]->(itemTag) | itemTag.name]
是特定项目的标签集合