【问题标题】:How to query next conversation sort by newest activity?如何按最新活动查询下一个对话排序?
【发布时间】:2020-09-24 10:43:24
【问题描述】:

我正在实现一个像 Facebook 这样的聊天系统,我有两张表,一张是消息,一张是对话:

conversations
id  |  peoples         | updatedAt
1      [user1, user2]    Today 8:10 PM 
2      [user1, user2]    Today 9:03 PM
3      [user1, user2]    Today 5:01 PM
4      [user1, user2]    Today 5:01 PM
5      [user1, user2]    Today 5:01 PM
6      [user1, user2]    Today 4:01 PM

当用户发送消息时,我将conversationsupdatedAt 字段更新为当前时间,这样我就可以查询最新的对话,但这里的问题是我如何在此之后继续查询最新的对话?例如,首先我将查询两个最新的对话,如您所见,这里将返回一个id为2 and 1的对话,然后我保存id为1updatedAt值(值为Today 8:10 PM)所以我可以继续查询条件为{updatedAt: {$lte: Today 8:10 PM}的最新对话,并且只接受2个对话,如first,它将返回id为3,4的对话,我保存id为4updatedAt字段(值为Today 5:01 PM),继续具有相同条件的查询:{updatedAt: {$lte: Today 5:01 PM} 它将返回 ID 为 3,5 的会话,ID 为 3 在我不需要它之前我有查询,那么如何避免这种情况?我使用 mongodb 作为数据库

【问题讨论】:

    标签: sql mongodb chat message


    【解决方案1】:

    您可能需要将updatedAt 保留为时间戳。
    Mongodb 有合适的类型。您可以通过以下方式在文档中查看更多信息 这个link

    【讨论】:

    • 我这样定义对话模式const schema = new Schema ( { peoples: [ {type:ObjectId } ] }, {timestamp: true})第二个参数{timestamp: true}添加两个字段createdAtand updatedAt,这两个字段是时间戳类型吗?
    • 啊,不,来自文档By default, Mongoose uses new Date() to get the current time 我想会将此更改为时间戳值,但此时间戳可以转换为正常日期,以便我可以在视图中显示?喜欢24-2-2020
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多