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}
我的问题是这样的,我有这样的查询:
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}