Neo4j 1.9.2:查询/过滤和计算多个节点类型

时间:2015-02-06 00:33:11

标签: neo4j

在Neo4j 1.9.2中,我想计算一组节点中EACH节点的所有关系。

我的所有节点都有三个属性:typeidcreated。他们都是通过“跟随”关系联系起来的。以下是它们如何组合在一起的示例:

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就会很难死。)

知道怎么做到这一点?我一直在倾倒文档,看看是否有某种方式,但我不确定是否存在。

1 个答案:

答案 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已经过时了 - 考虑升级!