我在节点上有一些动态数据源属性值。大约有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
任何帮助将不胜感激。
这里是一种方式:
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参数。