【问题标题】:Neo4J Cypher query - IN collection?Neo4J Cypher 查询 - IN 集合?
【发布时间】:2016-03-31 00:20:29
【问题描述】:

我有一个简单的图形数据库,它包含两种类型。

博文 标记

BlogPost 可以有很多标签。

我写了一篇 BlogPost 并给了它 4 个标签。我想搜索至少包含这四个标签的其他博客帖子。

我试过了

MATCH (b:BlogPost{id='156'})-[:tagged]->(original_tag)
WITH b, collect(original_tag) AS original_tags
MATCH (b2)-[:tagged]-(second_blog_tag)
WITH b, original_tags, collect(second_blog_tag) AS second_blog_tags, b2
WHERE original_tags IN second_blog_tags
RETURN b2.id  

然而行

WHERE original_tags IN second_blog_tags

错了。任何人都可以提供任何帮助吗?我对使用收集的想法是正确的还是有更好的方法?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    试试这个:

    MATCH (b:BlogPost{id='156'})-[:tagged]->(original_tag)
    WITH b, collect(original_tag) AS original_tags
    MATCH (b2)-[:tagged]-(second_blog_tag)
    WITH b, original_tags, collect(second_blog_tag) AS second_blog_tags, b2
    WHERE ALL(tag IN original_tags WHERE tag IN second_blog_tags)
    RETURN b2.id  
    

    你也可以试试:

    MATCH (b:BlogPost{id='156'})-[:tagged]->(original_tag)<-[:tagged]-(b2:BlogPost)
    WITH b, b2, count(distinct original_tag) as tagCount
    WHERE tagCount = size((b)-[:tagged]->())
    RETURN b2.id
    

    【讨论】:

    • 正确且非常有帮助 - 非常感谢。我是 cypher 新手,很难理解如何比较两个查询的集合 - 这个答案真的对我有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    相关资源
    最近更新 更多