这是此前一个问题的后续行动 How to model two nodes related through a third node in neo4j?
如果产品的功能通过与其他产品的connects_to
关系得到增强,那么应如何捕获该产品呢?
示例:给出
(shelf:Shelf {maxload:20})
,如果(node:L-bracket)-[connects-to]->(shelf)
,则shelf
的{{1}}增加10.现在,如果有人查询支持maxload
的{{1}},除了支持maxload而没有Shelf
的货架之外,我应该能够检索maxload=30
的这种组合作为选项。这是一个用例。
另一种是L-Bracket+Shelf
关系向L-bracket
节点添加全新属性的时间。我想到的选项是在称为“提供功能”的关系中添加一个属性,然后在返回节点时查询这些属性,以查看产品是否被其任何连接增强。
答案 0 :(得分:0)
第1部分:
我应该能够将这种L-Bracket + Shelf的组合检索为 一个选项,除了没有支持maxload的架子 L形托架。
此用例由OPTIONAL MATCH
处理:
MATCH (shelf:Shelf {maxload:30})
OPTIONAL MATCH (shelf)<-[:CONNECTS_TO]-(bracket:L-Bracket)
RETURN shelf, collect(bracket) as brackets
这将为您返回一个货架列表和每个货架的一组括号 - 如果它们没有任何括号,则为空集合。
第2部分:
另一个是在connections_to关系添加全新的时候 属性到Shelf节点。我想到的选择是添加一个 属于这种关系的属性叫做&#39;提供功能&#39;然后查询 返回节点时,以及是否有产品 通过任何连接增强
您可以简单地使用PROVIDES_FEATURE
关系类型,不需要属性。您可以按照与第1部分相同的方式申请。
答案 1 :(得分:0)
为了更加通用,假设可以连接到架子(而不仅仅是L-Bracket)的所有内容都由Accessory
节点表示,该节点具有type
和extraLoad
属性,像这样:
(:Accessory {type: 'L-Bracket', extraLoad: 10})
这将允许不同类型的附件和不同的额外负载能力。
使用此模型,您可以找到所有Shelf
/ Accessory
组合,这些组合可以通过这种方式保持至少30的负载:
MATCH (shelf:Shelf)
OPTIONAL MATCH (shelf)<-[:CONNECTS_TO]-(x:Accessory)
WITH shelf, COLLECT(x) AS accessories, SUM(x.extraLoad) AS extra
WHERE shelf.maxLoad + extra >= 30
RETURN shelf, accessories;