【发布时间】: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 的新手,因此我们将不胜感激。
【问题讨论】: