Neo4j:如何从 ID 列表中过滤掉节点?

Neo4j: How to filter out nodes from a list of IDs?

我正在尝试 "select all posts" 并排除 ID 数组中的特定节点(post 作者)。使用 SQL,您可以使用 NOT IN (1, 2, 3)。如何创建 CYPHER 查询来执行此操作?

Post  <-- author --  User
 - ID                 - ID

与 SQL 基本相同 ;)

MATCH (author)-[:author]->(post:Post)
WHERE NOT(ID(author) IN {id_list})
RETURN DISTINCT post

由于您将问题标记为 Neo4j.rb:

User.as(:author).posts.where('NOT(ID(author) IN ?)', [1,2,3])

在 Neo4j.rb 的较新版本中:

User.as(:author).posts.where_not('ID(author) IN ?', [1,2,3])

您没有提到 ID 的类型,所以我默认使用 Neo4j ID,但请记住,这些 ID 可以回收,因此不能作为参考长期使用。

编辑:

你的评论让我意识到也许更好的方法是:

User.where_not(id: ids).posts

它应该将 id 转换为您用于 id_property 的任何内容(默认为 uuid)。