Cypher 对动态属性值求和
Cypher to sum dynamic properties values
我在节点上有一些动态数据源 属性 值。大约有 5 个数据源,它们可以有一个或多个数据源。这些属性是通过使用 Spring Data Neo4j 中的地图的 @Properties 注释设置的。保存节点后,节点上的值设置如下:
dataSource.ds1.count="10"
dataSource.ds2.count="20"
dataSource.ds3.count="30"
... etc
我希望能够动态地对已设置的这些计数值求和,并使用该值对结果进行排序。
这是我目前拥有的一些起始 Cypher,其中列出了属性:
MATCH (n:Entity)
WITH n, [k in keys(n) where k =~ 'dataSources.(ds1|ds2).count'] as props
RETURN n.name, props
这个returns:
╒═══════════╤═════════════════════════════════════════════════╕
│"n.name" │"props" │
╞═══════════╪═════════════════════════════════════════════════╡
│"ENT1" │["dataSources.ds1.count","dataSources.ds2.count"]│
├───────────┼─────────────────────────────────────────────────┤
│"ENT2" │["dataSources.ds1.count","dataSources.ds2.count"]│
├───────────┼─────────────────────────────────────────────────┤
│"ENT3" │["dataSources.ds1.count"] │
└───────────┴─────────────────────────────────────────────────┘
如何使用属性名称获取值并对它们求和?
我正在考虑与此类似的东西,我可以在其中使用 apoc.sum
,但不确定如何遍历 属性 名称来获取它们的值。
RETURN n.name, apoc.coll.sum([COALESCE(toInteger(n.`dataSources.ds1.count`), 0), etc]) as count
ORDER by count DESC
如有任何帮助,我们将不胜感激。
这是一种方法:
MATCH (n:Entity)
RETURN
n.name,
COALESCE(n.`dataSources.ds1.count`, 0) + COALESCE(n.`dataSources.ds2.count`, 0) AS count
ORDER BY count
COALESCE 函数 returns 它的第一个非 NULL 参数。
或者,如果您在 props
parameter 中传递 属性 姓名列表:
MATCH (n:Entity)
RETURN n.name, REDUCE(s = 0, p IN $props | s + COALESCE(n[p], 0)) AS count
ORDER BY count
我在节点上有一些动态数据源 属性 值。大约有 5 个数据源,它们可以有一个或多个数据源。这些属性是通过使用 Spring Data Neo4j 中的地图的 @Properties 注释设置的。保存节点后,节点上的值设置如下:
dataSource.ds1.count="10"
dataSource.ds2.count="20"
dataSource.ds3.count="30"
... etc
我希望能够动态地对已设置的这些计数值求和,并使用该值对结果进行排序。
这是我目前拥有的一些起始 Cypher,其中列出了属性:
MATCH (n:Entity)
WITH n, [k in keys(n) where k =~ 'dataSources.(ds1|ds2).count'] as props
RETURN n.name, props
这个returns:
╒═══════════╤═════════════════════════════════════════════════╕
│"n.name" │"props" │
╞═══════════╪═════════════════════════════════════════════════╡
│"ENT1" │["dataSources.ds1.count","dataSources.ds2.count"]│
├───────────┼─────────────────────────────────────────────────┤
│"ENT2" │["dataSources.ds1.count","dataSources.ds2.count"]│
├───────────┼─────────────────────────────────────────────────┤
│"ENT3" │["dataSources.ds1.count"] │
└───────────┴─────────────────────────────────────────────────┘
如何使用属性名称获取值并对它们求和?
我正在考虑与此类似的东西,我可以在其中使用 apoc.sum
,但不确定如何遍历 属性 名称来获取它们的值。
RETURN n.name, apoc.coll.sum([COALESCE(toInteger(n.`dataSources.ds1.count`), 0), etc]) as count
ORDER by count DESC
如有任何帮助,我们将不胜感激。
这是一种方法:
MATCH (n:Entity)
RETURN
n.name,
COALESCE(n.`dataSources.ds1.count`, 0) + COALESCE(n.`dataSources.ds2.count`, 0) AS count
ORDER BY count
COALESCE 函数 returns 它的第一个非 NULL 参数。
或者,如果您在 props
parameter 中传递 属性 姓名列表:
MATCH (n:Entity)
RETURN n.name, REDUCE(s = 0, p IN $props | s + COALESCE(n[p], 0)) AS count
ORDER BY count