对动态属性值求和的密码

问题描述 投票:0回答:1

我在节点上有一些动态数据源属性值。大约有5个数据源,其中可能有一个或多个数据源。在Spring Data Neo4j中使用Map通过@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

此返回:

╒═══════════╤═════════════════════════════════════════════════╕
│"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

任何帮助将不胜感激。

neo4j cypher spring-data-neo4j
1个回答
0
投票

这里是一种方式:

MATCH (n:Entity)
RETURN
  n.name,
  COALESCE(n.`dataSources.ds1.count`, 0) + COALESCE(n.`dataSources.ds2.count`, 0) AS count
ORDER BY count

COALESCE函数返回其第一个非NULL参数。

© www.soinside.com 2019 - 2024. All rights reserved.