Cypher 查询帮助:按 属性 数组的内容排序查询结果

Cypher query help: Order query results by content of property array

我的 Neo4J 数据库中有很多场所。每个场地对象都有 属性 'catIds' 数组,其中包含场地类型的 ID。我想查询数据库,以便我获得所有场地,但它们是在它们的 catId 匹配或包含我提供查询的 ID 列表中的一些位置排序的。我希望这是有道理的:)

拜托,有人可以指出如何编写此查询的方向吗?

由于您在图形数据库中工作,因此您可以考虑在图形中对数据进行建模,而不是在 属性 中进行建模,因为后者很难获得。例如,在这种情况下,您可能会创建一堆 (v:venue) 节点和一堆 (t:type) 节点,然后通过 [:is] 关系 link 它们。每个场地都 linked 到一个或多个类型节点。每个类型节点都有一个'id' 属性: {id:'t1'}, {id:'t2'}等

那么你可以这样查询:

match (v:venue)-[r:is]->(:type) return v, count(r) as n order by n desc;

这会找到你所有的地点,连同它们的所有类型关系,并且 return它们按照它们有多少类型关系排序。

如果您只想获取列表中特定场地类型的节点:

match (v:venue)-[r:is]-(t:type) where t.id in ['t1','t2'] return v, count(r) as n order by n desc;

如果您想要所有场馆,但根据它们与您的列表的匹配程度排序,正如我认为您正在寻找的那样:

match (v:venue) optional match (v)-[r:is]->(t:type) where t.id in ['t1','t2'] return v, count(r) as n order by n desc;

比赛将获得你所有的场地;如果节点有任何关系,则可选匹配将在您的列表中找到关系。如果一个节点在您的列表中没有 links,可选匹配将失败并且 return null for count(r) 并且应该排序到底部。