【问题标题】:neo4j filter results from collect来自collect的neo4j过滤结果
【发布时间】:2015-10-22 15:42:22
【问题描述】:

我的问题是这样的,我有一个这样的查询:

MATCH (a:A),
(a)-[:relation]-(b:B)
RETURN {name: a.name, products: COLLECT(DISTINCT {productName: b.name, 
ident: b.identifier}) }

我找不到过滤“products”结果的方法,例如,将 productName = 'pname1' 的行包含在数组“products”中:

row1: {name: 'name', products:[{name: 'pname1', ident: 'id1'}, {name: 'pname3', ident: 'id3'}] }
row2: {name: 'name2', products:[{name: 'pname2', ident: 'id2'}] }

上面的例子只会返回第一行

提前感谢您的关注

【问题讨论】:

    标签: filter neo4j cypher collect


    【解决方案1】:

    WITH子句是一个很有意思的东西,可以用它来拆分查询,并且可以将此时的查询结果保存到变量中。

    所以,只获取第一行,查询将是

    MATCH (a:A),
    (a)-[:relation]-(b:B)
    WITH a, COLLECT(DISTINCT {productName: b.name, ident: b.identifier}) as products
    WHERE {productName: "pname1", ident:"id1"} in products
    RETURN {name: a.name, products: products}
    

    编辑:

    上面的解决方案比较了整个地图,如果有更多的属性,这有点难看。仅比较 productName 查询有点棘手:

    MATCH (a:A),
    (a)-[:relation]-(b:B)
    WITH a, COLLECT(DISTINCT {productName: b.name, ident: b.identifier}) as products
    UNWIND products as prows
    WITH a, prows, products
    WHERE prows.productName = "pname1"
    RETURN {name: a.name, products: products}
    

    【讨论】:

    • 非常感谢第二个成功了,我不知道为什么第一个没有给我任何结果。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多