如何过滤父节点,然后过滤子节点,而不让父节点受子节点过滤的影响?Neo4j 3.5
我有一组如何过滤父节点,然后过滤子节点,而不让父节点受子节点过滤的影响?Neo4j 3.5,neo4j,cypher,Neo4j,Cypher,我有一组作者节点。Author节点是多个Book节点的单亲 步骤:1)我想按姓名筛选作者。(例如author.name包含“e”) 步骤:2)一旦我有了这个过滤过的作者列表,我想按姓名过滤这些作者的每一本书。(例如,book.name包含“the”) 期望输出:(让我们想象一下奥斯卡·王尔德没有写任何带有“the”的书) 我的问题是,在第(2)步之后,所有没有写有“the”但的书的作者的名字中都有一个“e”,他们被抛弃了,就像(在本例中)奥斯卡·王尔德一样 我试过: MATCH (author
作者
节点。Author
节点是多个Book
节点的单亲
步骤:1)我想按姓名筛选作者。(例如author.name包含“e”)
步骤:2)一旦我有了这个过滤过的作者列表,我想按姓名过滤这些作者的每一本书。(例如,book.name包含“the”)
期望输出:(让我们想象一下奥斯卡·王尔德没有写任何带有“the”的书)
我的问题是,在第(2)步之后,所有没有写有“the”但的书的作者的名字中都有一个“e”,他们被抛弃了,就像(在本例中)奥斯卡·王尔德一样
我试过:
MATCH (author:Author) WHERE (author.name CONTAINS 'e')
WITH author
MATCH (book)<-[:WROTE]-(author) WHERE (book.name CONTAINS 'the')
RETURN author, book
MATCH(author:author)其中(author.name包含“e”)
与作者
匹配(书籍)您可以对书籍使用可选匹配
,因此如果找不到适合作者的书籍
,仍然可以返回作者
例如:
MATCH (author:Author) WHERE author.name CONTAINS 'e'
OPTIONAL MATCH (book)<-[:WROTE]-(author) WHERE book.name CONTAINS 'the'
RETURN author, COLLECT(book) AS books;
匹配(author:author),其中author.name包含“e”
选配(书)
MATCH (author:Author) WHERE author.name CONTAINS 'e'
OPTIONAL MATCH (book)<-[:WROTE]-(author) WHERE book.name CONTAINS 'the'
RETURN author, COLLECT(book) AS books;