2017-05-11 10 views
0

私は、現在のユーザのuidがyesに設定されているオブジェクトを検索したいが、これは動作していないような次の機能である。firebase objective c query

- (void)configureDatabase { 
    _ref = [[FIRDatabase database] reference]; 

    FIRUser *user = [FIRAuth auth].currentUser; 

    _refHandle = [[[[_ref child:@"tasks"] queryOrderedByChild:@"appliedByUsers"] queryEqualToValue:@YES childKey:user.uid] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) 

    { 

    NSLog(@"snapshot: %@", snapshot); 

    [_tasks addObject:snapshot]; 
    [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:_tasks.count-1 inSection:0]] withRowAnimation: UITableViewRowAnimationAutomatic]; 
}]; } 
tasks 
    -Kj3BawmhKjqbZXZdicq 
    applicationStatus: 
    appliedByUsers 
     bNDJtrn1Mmh51GXHTbMNR1MiTZt1: true 
     hUI0W0TZxObazIFxSRm8t990UgM2: true 
    price: 
    source: 
    taskName: 
    type: 
. 
. 
. 

どのように私は、現在のuser.uidが真であるタスクを取得するのですか?

答えて

0

user.uidchildKeyとする代わりに、queryOrderedByChildappliedByUsersと指定してください。

FIRUser *user = [FIRAuth auth].currentUser; 

_refHandle = [[[[_ref child:@"tasks"] queryOrderedByChild:[NSString stringWithFormat:@"appliedByUsers/%@",user.uid]] 
        queryEqualToValue:@YES]          
        observeEventType:FIRDataEventTypeChildAdded 
        withBlock:^(FIRDataSnapshot *snapshot) { 

    NSLog(@"snapshot: %@", snapshot); 

    [_tasks addObject:snapshot]; 
    [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:_tasks.count-1 inSection:0]] withRowAnimation: UITableViewRowAnimationAutomatic]; 
}]; 

注:あなたの価値trueは、queryEqualToValue:@"true"]

+0

ありがとうございましたNirav!@ "appliedByUsers/user.uid"に次のエラーが表示されるため、追加できません: 'InvalidPathValidation'、理由: '(queryOrderedByChild :)空でない文字列で、'。 '#' '$' '['または ']' ' パスにuser.uidを追加する別の方法はありますか? –

+0

@BesfortAbazi私の間違いは、編集された答えを確認してください –

+0

素晴らしい!ありがとうございました!:) –

1

クラウドFirestoreはまた、あなたのデータのソート順を指定し、希望するどのように多くの文書に制限を指定することができますされていることをブール値と文字列でない場合orderBy()とlimit()を使用して取得します。あなたはまた、並べ替え、最後の3つの都市を取得するため降順にでき

[[citiesRef queryOrderedByField:@"name"] queryLimitedTo:3]; 

[[citiesRef queryOrderedByField:@"name" descending:YES] queryLimitedTo:3]; 

をあなたはまた、複数のフィールドで注文することができますたとえば、あなたがアルファベット順で最初の3都市を問い合わせることができます。たとえば、あなたが状態で注文したかった、と降順の人口によって、各状態の順序内場合:

[[citiesRef queryOrderedByField:@"state"] queryOrderedByField:@"population" 
      descending:YES]; 

あなたはどこのOrderByと()フィルタ()とlimit()組み合わせることができます。次の例では、クエリが昇順にソート人口で、人口のしきい値を定義し、しきい値を超えた唯一の最初のいくつかの結果を返す:あなたは範囲比較(とフィルタを持っている場合は、しかし、

[[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] 
      queryOrderedByField:@"population"] 
      queryLimitedTo:2]; 

を<、< =、>、> =)、あなたの最初の順序は同じフィールド上に存在する必要があります:

有効:同じフィールド上のレンジフィルタとORDERBY

[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] 
      queryOrderedByField:@"population"]; 

無効:レンジフィルタとの最初のORDERBY異なるフィールド

[[citiesRef queryWhereField:@"population" isGreaterThan:@100000] 
      queryOrderedByField:@"country"]; 
関連する問題