我的Neo4J数据库中有很多场地。每个场地物品都有“猫咪”物品。这是一个数组,包含场地类型的ID。我想查询数据库,以便我获得所有场地,但是它们被命令在它们的catId匹配或包含一些我给出查询的ID列表中。我希望这是有道理的:)
拜托,有人能指出我如何编写此查询的方向吗?
答案 0 :(得分:1)
由于您在图形数据库中工作,您可以考虑在图形中建模数据,而不是在难以获得的属性中。例如,在这种情况下,您可以创建一堆(v:场所)节点和一堆(t:type)节点,然后通过[:is]关系链接它们。每个场所都链接到一个或多个类型节点。每个类型节点都有一个'id'属性:{id:'t1'},{id:'t2'}等。
然后你可以这样做一个查询:
match (v:venue)-[r:is]->(:type) return v, count(r) as n order by n desc;
这会找到你所有的场地,以及它们所有的类型关系,并按照它们有多少种类型关系来命令它们。
如果您只想在列表中获取特定场地类型的节点:
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;
比赛将获得你所有的场地;如果节点有任何匹配,可选匹配将在列表中找到关系。如果某个节点列表中没有链接,则可选匹配将失败并返回count(r)的null,并应排在最后。