如何通过 Cypher 中的一个属性检索特定关系? (neo4j)
How to retrieve a specific relationship by one of its properties in Cypher? (neo4j)
我正在尝试为两者提出 Cypher 语法:
- 为关系创建索引 属性
- 查询该索引以便从其中一个值中检索特定关系。
既然标签不能用于关系,那怎么办呢?
遗憾的是,您无法在 Neo4j 中为关系添加索引。所以,你不能通过它的 属性 值查询数据库的特定关系。
还有其他选择。
数据模型
您可以通过以下方式重新组织数据:
- 具体属性在节点中
- 创建特定的关系类型
通常,当查询所需的属性在节点中并且只有其他属性(即 cost
)在关系中时,您可以设计这种方式。
无论如何你可以通过特定的关系查询 属性:
MATCH (start)-[:RELATIONSHIP {property: "value"}]->(end)
这将以 :RELATIONSHIP
范围的全扫描结束。
如果您知道 start/end 节点 ID
如果您知道开始节点和结束节点的 ID,并且想要更新 属性 特定关系,那么这个应该有效:
MATCH (start)-[r:RELTYPE {property: "value"}]->(end)
WHERE id(start) = 1 AND id(end) = 2
WITH r
SET r.property = "new_value"
RETURN r
旧索引
警告:此功能已弃用。我相信它将在 Neo4j 3.0.0 中被删除。
但是有 - Relationship indexes。您可以查看它提供的内容以及此功能是否可以在您的应用中使用。
我正在尝试为两者提出 Cypher 语法:
- 为关系创建索引 属性
- 查询该索引以便从其中一个值中检索特定关系。
既然标签不能用于关系,那怎么办呢?
遗憾的是,您无法在 Neo4j 中为关系添加索引。所以,你不能通过它的 属性 值查询数据库的特定关系。
还有其他选择。
数据模型
您可以通过以下方式重新组织数据:
- 具体属性在节点中
- 创建特定的关系类型
通常,当查询所需的属性在节点中并且只有其他属性(即 cost
)在关系中时,您可以设计这种方式。
无论如何你可以通过特定的关系查询 属性:
MATCH (start)-[:RELATIONSHIP {property: "value"}]->(end)
这将以 :RELATIONSHIP
范围的全扫描结束。
如果您知道 start/end 节点 ID
如果您知道开始节点和结束节点的 ID,并且想要更新 属性 特定关系,那么这个应该有效:
MATCH (start)-[r:RELTYPE {property: "value"}]->(end)
WHERE id(start) = 1 AND id(end) = 2
WITH r
SET r.property = "new_value"
RETURN r
旧索引
警告:此功能已弃用。我相信它将在 Neo4j 3.0.0 中被删除。
但是有 - Relationship indexes。您可以查看它提供的内容以及此功能是否可以在您的应用中使用。