Php 将一条记录限制为一个密码集合

Php 将一条记录限制为一个密码集合,php,neo4j,cypher,Php,Neo4j,Cypher,我正在创建一个消息传递系统,我想在索引页上显示发送电子邮件的人的头条消息,类似于大多数电子邮件和聊天应用程序。问题是我似乎无法将消息的结果限制为1,也无法按消息的“created_at”日期而不是发送消息的人对结果进行排序 我的密码是: MATCH (p:Person)-[:SENT]->(m:Message)-[:SENT_TO]->(op:Person{username:"the_username"}) WHERE NOT p.username = "the_username"

我正在创建一个消息传递系统,我想在索引页上显示发送电子邮件的人的头条消息,类似于大多数电子邮件和聊天应用程序。问题是我似乎无法将消息的结果限制为1,也无法按消息的“created_at”日期而不是发送消息的人对结果进行排序

我的密码是:

MATCH (p:Person)-[:SENT]->(m:Message)-[:SENT_TO]->(op:Person{username:"the_username"})
WHERE NOT p.username = "the_username"
WITH p,m
ORDER BY m.created_at DESC
RETURN DISTINCT p.first_name as first_name, 
                p.last_name as last_name, 
                p.username as username, 
                p.image_name as image_name,
                COLLECT({subject:m.subject, 
                         created_at:m.created_at, 
                         body:m.body, 
                         message_id:id(m),
                         status:m.status}) as message
我希望让结果生成输入的顶部消息(通过消息节点上的created_at属性),然后根据created_at属性对结果进行排序,以便用户可以看到最后发送消息的人


谢谢

要仅从每个使用所需用户名发送消息的人处获取最新消息,您可以使用此稍加修改的查询:

MATCH (p:Person)-[:SENT]->(m:Message)-[:SENT_TO]->(op:Person{username:"the_username"})
WHERE NOT p.username = "the_username"
WITH p,m
ORDER BY m.created_at DESC
WITH p, (COLLECT(m))[0] AS m0
RETURN DISTINCT p.first_name as first_name, 
                p.last_name as last_name, 
                p.username as username, 
                p.image_name as image_name,
                COLLECT({subject:m0.subject, 
                         created_at:m0.created_at, 
                         body:m0.body, 
                         message_id:id(m0),
                         status:m0.status}) as message
这些变化是:

  • 增加了该子句:
    ,其中p,(COLLECT(m))[0]为m0
    。这将聚合每个发件人的所有消息(按顺序降序创建),并仅保留第一条消息,给它一个标识符“m0”
  • 随后的条款更改为使用“m0”而不是“m”

  • 注意:在#1中,您实际上可以使用
    作为m
    ,这样可以避免执行#2。但是,我选择使用不同的标识符,以使查询更易于理解和维护。

    非常感谢您限制顶部项目的方法。有没有关于如何按最后发送消息的人排序的IDE?非常感谢!我算出了其余部分,并在返回中从集合中取出消息,然后将用户与消息元素一起添加到返回中,这样我就可以按消息id对其进行排序。我只是想:
    HEAD(COLLECT(m))
    可能比
    COLLECT(m)[0]
    更具可读性。