2014-10-02 91 views
0

我正在使用Parse.com API進行移動應用程序,並且擔心NoSQL數據庫建模。Parse.com上的左側加入

語境: 我有類EstablishmentUser,我希望我的用戶可以收藏的Establishment。但我無法爲此功能更改Establishment本身。所以我將引用保存到另一個地方(JoinTable或用戶的屬性作爲數組)。

問題: 問題是我的應用程序通過10獲得了應用程序分頁,並且它必須首先顯示用戶最喜歡的機構。但是建立並不知道用戶的喜好。

所以,假設我們有一個用戶有3個機構喜歡。我怎樣才能得到一個請求10個機構與前3個作爲我的用戶的最愛? P.S:下一個請求會返回10個我的用戶不喜歡的單位。

回答

1

我想我已經得到妥善解決:

所有的 - 首先創建Parse.com用戶類的一個數組裏面列;本專欄將用於存儲所有最喜歡的機構。在這個數組中,你可以編寫所有的建立標識,像這樣(作爲字符串):[EstablishmentId0,EstablishmentId1,EstablishmentId2]

- 當你做一個查詢來獲得所有的建立,你會得到一個ArrayList,按id標識當前的用戶收藏夾陣列。如果某些元素與您的Array ID匹配,請將其放在列表頂部。因此,結果將是列表頂部的三個收藏夾中的10個元素的列表。

希望它有幫助! 問候,

1

對於一個長期的解決方案,我認爲你應該創建一個名爲另一個類喜歡其中包含2指針FROMUSERtoEstablishment。然後你就可以像下面執行查詢:

var Likes = Parse.Object.extend("Likes"); 
var currentUser = Parse.User.current(); 

var likesQuery = Parse.Query(Likes); 
likesQuery.limit(10); 
likesQuery.equalTo("fromUser",currentUser); 
likesQuery.find({ 
     success: function(results){ 

     } 
}); 

通過長期的,我的意思是你可以利用在toEstablishment列指針對象,例如,通過使用include查詢得到這個查詢中更Establishment數據。

0

上面提到的兩種解決方案得到了我的+1,因爲我認爲它們非常好,但我相信可以做更好的事情。

從我所看到的,你的服務器不需要知道用戶是否喜歡某個機構。只有客戶需要知道這一點。一旦我知道這樣的事情,我立即知道我要在本地工作100%,而不是將這種信息存儲在服務器上(並使用我的配額請求,數據,電池等)。

現在我假設你的應用程序中有一個數據庫,可以定期更新自己的服務器上的任何內容(如果你不這樣做,我建議你這樣做,但那不是重點)。我會做的只是在你的機構中添加一個布爾屬性「isFavourite」,並且當你在本地加載它們時,檢查它是否是本地的,並在必要時將其放在0節(或頂部):)

允許您更快,更有效地工作,並且仍然可以完成您的工作。

如果你沒有數據庫,你可以採用效率較低的方法,並將你的收藏夾存儲在NSUserDefaults(例如ID數組)中。由於UserDefaults是在你的應用程序開始時加載的,而不是在需要的時候加載,所以它有點愚蠢,它並不適用於那種存儲,但它同樣適用。

注:我強烈建議您使用類似於您的解析數據庫的數據庫,因此您可以隨時在使用應用程序時加載本地內容(這是非常簡單和快速的),並且每次只更新一次一段時間(例如用戶啓動應用程序時)。這樣,您的用戶可以脫機閱讀,快速加載,也可以通過這種方式添加「本地」屬性。例如自定義設置,用戶想要添加的私人場所,「筆記」等等任何想到的東西:)