如何在Neo4j中使用Cypher表示此查询

时间:2016-12-03 22:15:48

标签: neo4j cypher

我在Neo4j数据库中解决查询时遇到了一些问题。我的数据库存储有关用户,歌曲和专辑的信息。用户可以购买歌曲和专辑,也可以关注其他用户。

我从" Lisa"开始用户。我想找到购买相同风格的专辑的用户,而不是Lisa购买的专辑,但他们不会跟随Lisa(他们会推荐Lisa用户跟随他们)。

我认为该查询与此类似,但我无法找到正确的sintax来代表它。

    MATCH (me:User)-[:BOUGHT]->(a:Album)
    MATCH (other:User)-[:BOUGHT]->(a2:Album)
    WHERE NOT (me)-[:FOLLOWS]->(other) AND me.username="Lisa" 
    AND other.username <> "Lisa" AND a.style=a2.style
    RETURN other.username

有任何帮助吗? 非常感谢:)

1 个答案:

答案 0 :(得分:0)

您的查询可以正常使用此数据集。我可能会误解某些东西 - 你能进一步说明问题吗?

CREATE
  (u1:User {username: "Lisa"}),
  (u2:User {username: "Louis"}),
  (a1:Album {style: "rock"}),
  (a2:Album {style: "rock"}),
  (u1)-[:BOUGHT]->(a1),
  (u2)-[:BOUGHT]->(a2)

我在您的查询中添加了一些美容功能:

MATCH (me:User {username: "Lisa"})-[:BOUGHT]->(a1:Album)
MATCH (other:User)-[:BOUGHT]->(a2:Album)
WHERE NOT (me)-[:FOLLOWS]->(other)
  AND other.username <> "Lisa"
  AND a1.style=a2.style
RETURN other.username

结果是:

╒══════════════╕
│other.username│
╞══════════════╡
│Louis         │
└──────────────┘