2017-11-03 4 views
0

私はthis postから、Firestoreのクエリは現在以下のようなシナリオを提供していないことを理解しています。他の回答ではアドバイスのように値を使用して、私は照会したい配列フィールドのマップを作成することですFirebaseは、配列に問い合わせることができません

FIRCollectionReference *ref = [defaultFirestore collectionWithPath:@"/somecollection"]; 
FIRQuery *query = [ref queryWhereField:@"foos.email" isEqualTo:@"[email protected]"]; 

:このようなデータを考える:よう

somecollection/somedoc: 
    foos: [ { name:"foo" email:"[email protected]" }, ... ] 
somecollection/someotherdoc: 
    foos: [ { name:"bar" email:"[email protected]" }, ... ] 

私は、クエリを記述することはできませんキー。ような何か:

somecollection/somedoc: 
    foos: [ { name:"foo" email:"[email protected]" }, ... ] 
    emails: { "[email protected]": true, ... } 
somecollection/someotherdoc: 
    foos: [ { name:"bar" email:"[email protected]" }, ... ] 
    emails: { "[email protected]": true, ... } 

今私のクエリは次のようになります。

FIRCollectionReference *ref = [defaultFirestore collectionWithPath:@"/somecollection"]; 
FIRQuery *query = [ref queryWhereField:@"[email protected]" isEqualTo:@(YES)]; 

しかし、このクエリは、メールアドレスがマップのキーのために良い構文ではないことを、私は考えて事実のために、何の文書を返しません。他の可能性のあるノイズの中には、.というドットが含まれています。これは逆参照演算子としてFIRQueryに見えます。

誰かが配列(またはマップのキーとして不適切なように見える他のオブジェクト)の電子メールのクエリ方法を説明できますか?

答えて

0

FIRFieldPathというクエリには、queryWhereFieldPath:isEqualTo:と呼ばれるさまざまなクエリがあります。フィールドパスには、フィールド名の区切り文字と見なされるものが許容されるようです。これは簡単に形成され、次のように使用されます。

FIRFieldPath *path = [[FIRFieldPath alloc] initWithFields:@[@"emails", @"[email protected]"]]; 
FIRQuery *query = [ref queryWhereFieldPath:path isEqualTo:@(YES)]; 

しかし、奇妙なことに、この大人に見えるデータベースには、このようなおもちゃのようなクエリ言語があります。

関連する問題