【问题标题】:Sorting by Elements in Collection in Cypher Query在 Cypher 查询中按集合中的元素排序
【发布时间】:2015-07-31 02:27:25
【问题描述】:

我正在开发一个使用 Neo4J 的应用程序,但我在某些查询中遇到了排序问题。我有一个有促销活动的商店列表,因此每个商店都有一个节点,每个促销活动都有一个节点。每个商店可以有多个促销活动,因此它是一对多的关系。一些促销活动是精选的(特色属性 = true),所以我希望这些促销活动首先出现。我正在尝试构建一个执行以下操作的查询:

  • 以集合的形式返回带有促销的商店列表(这样返回非常适合分页)
  • 对商店进行排序,以便首先出现具有最多特色促销的商店
  • 对集合进行排序,以便首先出现特色促销

到目前为止,我有以下内容:

MATCH (p:Promotion)-[r:BELONGS_TO_STORE]->(s:Store) WITH p, s, collect(p.featured) as featuredCol WITH p, s, LENGTH(FILTER(i IN featuredCol where i='true')) as featuredCount ORDER BY p.featured DESC, featuredCount DESC RETURN s, collect(p) skip 0 limit 10

首先,我尝试使用 WITH 子句使用特色属性创建一个集合。然后,我尝试创建第二个集合,其中特色属性等于 true,然后在第二个 WITH 子句中获取长度。这会正确地对带有促销的集合进行排序,而不是对商店进行排序。如果我尝试像这样在末尾添加另一种排序,则会出现错误,因为 featureCount 变量不在 RETURN 子句中。我不想在 RETURN 子句中使用 featuresCount 变量,因为它会导致我的分页关闭。

这是我的第二个查询:

MATCH (p:Promotion)-[r:BELONGS_TO_STORE]->(s:Store) WITH p, s, collect(p.featured) as featuredCol WITH p, s, LENGTH(FILTER(i IN featuredCol where i='true')) as featuredCount ORDER BY p.featured DESC, featuredCount DESC RETURN s, collect(p) ORDER BY featuredCount skip 0 limit 10

我是 Neo4J 的新手,因此我们将不胜感激。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    此查询 (see this console) 对您有用吗?

    MATCH (p:Promotion)-[r:BELONGS_TO_STORE]->(s:Store)
    WITH p, s
    ORDER BY p.featured DESC 
    WITH s, COLLECT(p) AS pColl
    WITH s, pColl, REDUCE(n = 0, p IN pColl | CASE
                          WHEN p.featured
                          THEN n + 1
                          ELSE n END ) AS featuredCount
    ORDER BY featuredCount DESC 
    RETURN s, pColl
    LIMIT 10
    

    此查询执行以下步骤:

    • 它对匹配的行进行排序,以便具有特色促销的行排在第一位。
    • 它将每个不同s 的所有p 节点聚合到pColl 集合中。特色促销仍然首先出现在每个 pColl 中。
    • 它会计算每个pColl 中的特色促销数量,并对商店进行排序,以便最先出现特色促销的商店。
    • 然后返回结果。

    注意:此查询假定featured 具有布尔值,而不是字符串。 (仅供参考:ORDER BY 认为 true 大于 false)。如果这个假设不正确,您可以将WHEN 子句更改为WHEN p.featured = 'true'

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2021-10-22
      • 2012-10-31
      相关资源
      最近更新 更多