更具体地说,我想执行以下操作(如果有帮助,请使用node / JS):
假设您有3个工作条件的列表(“ JavaScript”,“ PHP”,“ MySQL”)。
我有一个图形设置,其中每个Person
节点可以连接到许多Skill
节点。我希望能够运行一个查询,该查询将返回Person
与查询中指定的至少一个至所有技能节点具有连接的所有节点,然后按每个用户有多少个肯定的连接进行排序。如果工作条件是变量,使此查询有效的最有效方法是什么?
到目前为止,这就是我所拥有的。同样,这可行,但是如何使OR
语句成为变量?
MATCH (n:Persons)-[r:KNOWS]-(x:Skill) WHERE x.name = 'PHP' OR x.name = 'JavaScript' OR x.name = 'MySql' RETURN DISTINCT n COUNT(n) ORDER BY COUNT(n) DESC
您可以使用IN
运算符来测试值是否与列表中的值匹配。
MATCH (n:Persons)-[:KNOWS]-(x:Skill)
WHERE x.name IN ['PHP', 'JavaScript', 'MySql']
RETURN n, COUNT(x) AS nSkills
ORDER BY nSkills DESC;
由于返回子句使用COUNT()
功能聚合了n
,它是多余的使用DISTINCT n
,所以查询遗漏DISTINCT
。
注意:为了提高效率,您应该将列表作为参数传递。例如,如果needed_skills
是包含技能列表的参数,则查询将如下所示:
MATCH (n:Persons)-[:KNOWS]-(x:Skill)
WHERE x.name IN {needed_skills}
RETURN n, COUNT(x) AS nSkills
ORDER BY nSkills DESC;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句