Cypher / neo4j:计算并保持属性计数

时间:2014-11-11 10:24:41

标签: neo4j cypher

我的neo4j数据库中有几个节点,所有节点都是相同的类型,并且有几个属性和值。现在我想为每个节点引入一个比率:不同节点在此属性中具有相同值的可能性(如果它具有此属性)。我可以计算出我瞄准的比率。但是为了在SET命令中使用它,我需要将user2添加到第二个WITH行 - 然后该比率不再起作用。如何更改命令以便计算比率并将其存储在7个节点中?

欢呼 - 雷恩

示例:http://console.neo4j.org/r/iwvxf1

我的目标:(很明显,'比例'还不存在 - 这就是我想要实现的目标)

> match n return n.ratio, n.feature1, n.feature2
> +---------+------------+------------+ 
> | n.ratio | n.feature1 | n.feature2 |
> +---------+------------+------------+
> | 0.42857 | abc123     | ABC        | 
> | 0.42857 | abc123     | ABC        |
< | 0.42857 | abc123     | ABC        |
> | 0.28571 | xyz123     | ABC        |
> | 0.28571 | abc987     | QWE        |
> | 0.28571 | xyz123     | WER        |
> | 0.28571 | abc987     | XQZ        |
> | null    | null       | 123        |
> | null    | null       | 987        |
> +---------+------------+------------+

到目前为止我的查询:

// GET GLOBAL COUNT
MATCH (user1:User)
WHERE user1.feature1 IS NOT NULL
WITH count(*) AS global_count

// GET INDIVIDUAL COUNT
OPTIONAL MATCH (user2:User)
WHERE user2.feature1 IS NOT NULL
WITH global_count, user2.feature1 AS feature, count(*) AS indiv_count
RETURN feature, global_count, indiv_count, ((indiv_count*1.0)/(global_count*1.0)) AS ratio

这确实会返回我想要的比率。但我不知道我需要做些什么来将这些比率存储在各个节点中。作为一个脚本小子,我的自然反应将是一个联想阵列,但AFAIK,在密码中没有这样的东西。如果你能告诉我,我错了,你就是我的一天: - )

1 个答案:

答案 0 :(得分:4)

使用WITH:

而不是返回
WITH feature, ratio
MATCH (u:User)
WHERE u.feature1 = feature
SET u.ratio = ratio