【问题标题】:Cypher query in a neo4j graphNeo4j 图中的密码查询
【发布时间】:2021-06-14 16:37:19
【问题描述】:

我在 Neo4j 中有以下图表:
图书:book_id、isbn、language_code、title、image_url、small_image_url、avg_ratings、
作者:姓名,
读者: id,
具有 3 个关系:
(Reader)-[:Rated]->(Book) 具有属性 {rating:value},
(Reader)-[:Recommend ]->(书)
(作者)-[:Write]->(书)

我想通过 Cypher 的查询找到最推荐的书。
我写了一个查询,但我不太确定,因为我不熟悉使用 count() 和 max() 运算符。

这是我的尝试:

MATCH (r:Reader) - [rel:recommend] -> (b:Book) 
RETURN count(rel), b 
ORDER BY count 
LIMIT 1

【问题讨论】:

  • 请包括您的尝试。
  • MATCH (r:Reader) - [r:recommend] -> (b:Book) RETURN count(r), b ORDER BY count LIMIT 1
  • 嗯,变量r很困惑:它是指读者还是推荐关系?你应该得到一个语法错误。您可能还需要按 DESC 排序。

标签: neo4j cypher graphdb property-graph


【解决方案1】:

我会试试这个:

MATCH (:Reader) - [:recommend] -> (b:Book) 
RETURN 
    count(1) AS `Number of Recommendations`, 
    b AS `Book`
ORDER BY `Number of Recommendations` DESC
LIMIT 1

我会放弃LIMIT 子句,直到你确定它正在做你想做的事情。我没有你的数据库,所以我无法测试这个,但也许这可以作为第一次尝试。

【讨论】:

  • 谢谢,但我还是不明白 count(1) 如何计算每本书的推荐数。
  • 为什么要放 DESC?
  • 您需要 DESC 以降序排列值,以便第一个是最大的。 count(1) 只是根据分组进行计数 - 在这种情况下是按书。执行count(1) 通常比执行count(r) 快一点。我已经在我可以访问的 Neo4j 数据库上测试了这个代码的一个版本,它可以工作。
最近更新 更多