获得最新记录"其他用户"解析核心数据库

时间:2016-03-02 13:05:00

标签: ios database swift parsing parse-platform

我正在使用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要做的是在每个唯一的其他用户的基础上获取具有最大createdAt字段(DateTime)的消息。

1 个答案:

答案 0 :(得分:0)

我认为你应该做的是对fromQuery和toQuery进行限制:

fromQuery.limit = 1
toQuery.limit = 1

这样你总能得到2个结果。然后,当您得到结果时,只需比较2个结果的createdAt属性。