我使用Parse在基於Swift的iOS應用程序中開發一個簡單的聊天系統。到目前爲止,我有兩個在Parse中定義的類:User(定義一個用戶)和Message(定義發送給用戶的單個消息)。這是我的消息類字段:通過「OtherUser」解析核心數據庫獲取最新記錄
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)的消息。