在Neo4j 1.9.2中,我想计算一组节点中EACH节点的所有关系。
我的所有节点都有三个属性:type
,id
和created
。他们都是通过“跟随”关系联系起来的。以下是它们如何组合在一起的示例:
user('id:1')-[follows]->review('id:1')
user('id:1')-[follows]->user('id:2')
user('id:2')-[follows]->review('id:1')
你明白了。
结果应该是这样的:
[
{
followers: 2,
id: 1
created: 2013-12-13T12:13:42-08:00
type: review
},
{
followers: 1,
id: 2,
created: 2012-02-13T12:13:43-08:00
type: user
},
{
followers: 0,
id: 1,
created: 2012-02-13T12:13:43-08:00,
type: user
}
]
我给出的数据基本上如下:
{
users: [1, 2],
reviews: [1]
}
我尝试过这样的查询:
start user1=node:user('id:1'),
user2=node:user('id:2'),
review1=node:review1('id:1')
match user1<-[user1_f:follows]-(),
user2<-[user2_f:follows]-(),
review1<-[review1_f:follows]-()
return user1, count(user1_f),
user2, count(user2_f),
review1, count(review1_f);
但很明显,对于node:id
对的大型列表来说这是站不住脚的(实际上,一旦查询变大,Neo就会很难死。)
知道怎么做到这一点?我一直在倾倒文档,看看是否有某种方式,但我不确定是否存在。
答案 0 :(得分:2)
如果您想为许多节点运行计数操作,请考虑使用如下索引:
start users=node:user('id:(1 OR 2 OR 3 OR 4)')
match user<-[f:follows]-(),
return user, count(f);
对于评论,要么运行单独的查询,要么创建包含用户和评论的索引。 如果您有多个以逗号分隔的起点,则存在在比赛中遇到交叉产品的危险。
PS:Neo4j 1.9.2已经过时了 - 考虑升级!