javascript - neo4j - 查找与匹配 x 长度属性值列表的 Node 有关系的所有 Node

标签 javascript node.js neo4j

更具体地说,我想执行以下操作(如果有帮助,请使用 node/JS):

假设您有一个包含 3 个工作条件(“JavaScript”、“PHP”、“MySQL”)的列表。

我有一个图表设置,其中每个 Person Node 都可以连接到许多 Skill Node 。我希望能够运行一个查询,该查询将返回所有 Person Node ,这些 Node 至少连接到查询中指定的一个和最多所有技能 Node ,然后按积极的数量排序每个用户拥有的连接。如果作业标准是变量,使此查询有效的最有效方法是什么?

这是我目前所拥有的。同样,这行得通,但如何使 OR 语句成为变量?

匹配 (n:Persons)-[r:KNOWS]-(x:Skill) WHERE x.name = 'PHP' OR x.name = 'JavaScript' OR x.name = 'MySql' 返回不同的 n 计数(n) 按 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;

由于 return 子句使用 COUNT() 函数来计算 aggregaten 上,使用 DISTINCT n 是多余的,因此查询省略了 DISTINCT

注意:为了提高效率,您应该将列表作为 parameter 传递.例如,如果 needed_skills 是包含技能列表的参数,查询将如下所示:

MATCH (n:Persons)-[:KNOWS]-(x:Skill)
WHERE x.name IN {needed_skills}
RETURN n, COUNT(x) AS nSkills
ORDER BY nSkills DESC;

(列表参数的 Here is another example。)

关于javascript - neo4j - 查找与匹配 x 长度属性值列表的 Node 有关系的所有 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926862/

相关文章:

javascript - mongodb javascript更新

javascript - Node.js:中间件和回调函数的执行顺序?

java - 无法从 SDN4 检索一组父类(super class)型对象

java - 非托管扩展 TransactionEventHandler Neo4j

javascript - Express js Controller 从 api 服务获取数据并呈现 View

javascript - 如何在 Perl CGI 程序中链接到上一个网页?

javascript - 找不到模块 'jsonwebtoken' Node.js

javascript - CSS 基于元素高度?

javascript - 检测元素是否插入并根据元素运行函数

Neo4j Cypher 查询根据开始结束条件列出具有单一关系的节点路径