neo4j如何做一个明确的desc限制10

时间:2016-07-14 04:12:27

标签: neo4j cypher

我有这个查询

我想获得前10个不同的teams.id。 我怎么能这样做?

这个查询对吗?

MATCH (u:User)-[:CreatesChat]-(c:ChatItems)
with u,count(c.id) as chats
order by chats desc 
with chats,u
return chats,u limit 10

EDITED

我有这个查询

MATCH (c:ChatItems)-[:PartOf]->(t:TeamChatSession)-[:OwnedBy]-()

我需要在另一个查询中使用聊天

if let value = Double(stringValue) {
    print("I want two precision point for \(value) to be \(String(format: "%.2f", value))")
}

但我只需要前10个chats.id代码和user.id

如何编写此查询以保持聊天和用户的10个值?

1 个答案:

答案 0 :(得分:0)

再次强调,为节点添加标签!在您这样做之前,您的查询将会非常缓慢!

因此,假设你要添加标签,并假设你的:团队节点已经是唯一的(你应该有一个独特的约束:Team(id)),这可能是你正在寻找的: / p>

MATCH (team:Team)
WITH team ORDER BY team.id DESC LIMIT 10
...

根据您的要求,您现在拥有团队ID顺序排名前10的团队。

但是,您的查询正在做其他事情,所以我认为您还有其他想要对这些前10名团队做的事情。你必须告诉我们你想要做些什么,你最终想要的结果是什么,如果你想要你想要的那种帮助。

以下是一些猜测。

您是否希望获得这些前10名团队中聊天记录的所有聊天ID?然后这应该工作:

MATCH (team:Team)
WITH team ORDER BY team.id DESC LIMIT 10
OPTIONAL MATCH (team)-[:PartOf]-(chat:Chat)
RETURN team.id, COLLECT(chat.id) AS chats

对于每一行,您将拥有团队ID,然后是属于该团队的聊天ID列表。

如果这不是您想要的,请说清楚。如果你只留下一个问题并详细阐述并澄清,而不是每天与同一问题直接相关的新问题,也可能会有所帮助。

我还强烈建议重读整个developer manual,并浏览浏览器应用程序中包含的所有教程。现在,您最需要的是对Cypher查询工作方式的基本理解,然后在此基础上进行构建。如果没有这些基础知识而在这里反复提问,将无法为您提供良好的服务。