【问题标题】:Using Cypher, multiple nodes have a relationship with a single node, how to query matches of those multiple nodes to find matching root node使用Cypher,多个节点与单个节点有关系,如何查询这些多个节点的匹配以找到匹配的根节点
【发布时间】:2017-08-08 21:27:06
【问题描述】:

好的,让我来设置一下:我创建了一个 Neo4J 数据库,其中北美的每个车辆装饰都作为车辆节点(每个车辆节点都有一个 :Vehicle 标签)。现在,我还创建了 22 个其他标记节点来描述一个特征。例如,我有一个“:MDL”特性节点、一个“:YR”特性节点、一个“:DRIVE”特性节点和一个“:DIV”特性节点。每个特征节点都有一个名为“value”的属性。

所以,如果我想查找所有配备 4WD 的 2016 款雪佛兰车型,我的 Cypher 查询如下:

MATCH
    (v:Vehicle)--(:DIV{value:"Chevrolet"}),
    (v)--(:DRIVE{value:"4WD"}),
    (v)--(:YR{value:"2016"}),
    (v)--(model:MDL)
return distinct(model.value)

而且,这成功返回了提供 4WD(而不是 AWD)的 8 款雪佛兰车型,如下所示:

"Silverado 3500HD"
"Colorado"
"Silverado 2500HD"
"Silverado 1500"
"Silverado 3500HD Chassis"
"Tahoe"
"Suburban"
"Suburban 3500HD"

我的问题是查看个人资料计划,我认为这不是最有效的方法。因为基本上 Cypher 是独立地制作每个匹配模式,然后合并结果。我试图让 Cypher 一步完成这一切。有人对如何提高效率有任何建议吗?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    怎么样

    MATCH (v:Vehicle)--(model:MDL)
    WHERE (v)--(:DIV{value:"Chevrolet"})
    AND (v)--(:DRIVE{value:"4WD"})
    AND (v)--(:YR{value:"2016"})
    RETURN DISTINCT (model.value)
    

    不确定这是否会彻底改变个人资料,但它似乎可以更好地表达您想要完成的目标。

    希望这会有所帮助!

    问候, 汤姆

    【讨论】:

    • 谢谢,帮了大忙。没有我的方法那么快,但是当我想要具有 4WD 或 AWD 的模型时,它可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多