2014-05-04 79 views
5

我有一個用戶,活動,照片類。用戶喜歡其他用戶活動分類附加屏幕截圖活動分類https://dl.dropboxusercontent.com/u/33860877/Activity.pngPFQuery限制查詢

我的問題是,當用戶喜歡超過1000時,「過濾器喜歡」查詢的限制將導致下面的方法獲取用戶已經喜歡的用戶,因爲活動數量(喜歡)超過1000.在這裏應該做些什麼來避免這種情況?

-(void) loaddata { 

PFQuery *filterUsers = [PFUser query]; 
[filterUsers whereKey:kMUParseUserAccountStatus equalTo:@"Active"]; 
filterUsers.limit =1000; 


PFQuery *filterLikes = [[PFQuery alloc] initWithClassName:kMUActivityClassKey]; 
[filterLikes whereKey:kMUActivityUserFromKey equalTo:[PFUser currentUser]]; 
filterLikes.limit =1000; 


PFQuery *query = [[PFQuery alloc] initWithClassName:kMUPhotoClassKey]; 
[query whereKey:kMUPhotoUserKey notEqualTo:[PFUser currentUser]]; 
[query whereKey:kMUPhotoPicturePriorityKey equalTo:@(0)]; 
[query whereKey:kMUPhotoUserKey matchesQuery:filterUsers]; 
[query whereKey:kMUPhotoUserKey doesNotMatchKey:kMUActivityUserToKey inQuery:filterLikes]; 
[query includeKey:kMUPhotoUserKey]; 

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

    if(!error) 
    { 

     if(objects.count>0) 
     { 


      [self updateInformation]; 

     } 


     else 
     { 
      if(objects.count==0) 
      { 
       self.hasMorePhotos = false; 
      } 

     } 
    } 


}]; 
} 
+0

您是否解決了這個問題? – Ilario

回答

0

您需要解決1000個記錄限制。

如果我正確理解你,你想顯示照片,當前用戶一直不喜歡。您的解決方案效率不高,因爲您比較了1000個對象的查詢中的鍵(或者,如果限制不是1000,那麼您的解決方案可能需要比較數千個對象)。

如果您需要過濾掉喜歡的照片,則可以在用戶上存儲一組objectID。當用戶喜歡照片時,可以將此objectId添加到User對象上的數組或與用戶綁定的另一個對象。然後,在您的查詢中,您可以與此陣列進行比較而不是另一個查詢:

[query whereKey:@"objectId" notContainedIn:arrayOfLikedObjectIds]; 
+0

雖然這個解決方案效率如何?假設我們正在談論instagram。每個用戶有1000個喜歡,你建議將它們存儲在一個數組中?那麼你需要對這個數組進行排序(嘗試教Parse這樣做),並希望notContainedIn:arrayOfLikedObjectIds將受益於排序後的數組,或者會有巨大的性能損失。 我不知道一個好的解決方案,但似乎比較兩個表後端應該是相當有效的,因爲這些可能不是數組支持。 –