neo4j 过滤来自收集的结果

neo4j filter results from collect

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

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'}] }

上面的例子只会return行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}