【问题标题】:Get Latest Record per "OtherUser" Parse Core Database获取每个“OtherUser”解析核心数据库的最新记录
【发布时间】:2016-06-15 08:31:28
【问题描述】:

我正在使用 Parse 在基于 Swift 的 iOS 应用程序中开发一个简单的聊天系统。到目前为止,我在 Parse 中定义了两个类:User(定义用户)和 Message(定义发送给用户的单个消息)。这是我的 Message 类字段:

UserFromID (pointer): points to the User object that sent the message
UserToID (pointer): points to the User object that receives the message
createdAt (DateTime): creation point in time (built-in field)
Content (string): the textual message to show the user

在对话选择屏幕上,我想显示一个表格,列出登录用户与之交互的每个用户。我还想获取该对话中记录的最后一条消息,而不管该对话中的两个用户之间是谁发送的。我已经能够做到这一点,但是以一种浪费的方式:

// get all messages sent FROM and TO the user
let primaryObj = PFObject(withoutDataWithClassName: "_User", objectId: self.userID)
let fromQuery = PFQuery(className: "Message")
let toQuery = PFQuery(className: "Message")

// add constraints to both queries
fromQuery.whereKey("UserFromID", equalTo: primaryObj)
toQuery.whereKey("UserToID", equalTo: primaryObj)

// generate the concatenated query, include User access, and return sorted
let masterQuery = PFQuery.orQueryWithSubqueries([fromQuery, toQuery])
masterQuery.includeKey("UserFromID")
masterQuery.includeKey("UserToID")
masterQuery.orderByDescending("createdAt")

// execute the query, and perform response logic
masterQuery.findObjectsInBackgroundWithBlock({
    (results: [PFObject]?, error: NSError?) -> Void in
    // query logic goes here...
})

这可行,但同样,它会返回所有用户之间发送给和来自登录用户的所有消息。我只想要每个用户之间的最新消息。当前的解决方案会产生大量开销,我认为 Parse 对对象请求的硬限制是 1000。两个用户很容易在一个月甚至一周内相互发送 1000 条消息,具体取决于用户。我的解决方案需要每台设备进行许多大型查询,忽略缓存计划,而我的请求将仅来自聊天。尤其是当数据要求如此之低时。

我希望我的 fromQuery 和 toQuery 做的是在每个唯一的 otherUser 基础上获取具有最大 createdAt 字段 (DateTime) 的消息。

【问题讨论】:

    标签: ios database swift parsing parse-platform


    【解决方案1】:

    我认为你应该做的是像这样限制 fromQuery 和 toQuery:

    fromQuery.limit = 1
    toQuery.limit = 1
    

    这样您将始终只获得 2 个结果。然后,当您获得结果时,只需比较 2 个结果的 createdAt 属性即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 2015-11-07
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多