2017-10-13 4 views
0

Im Arbeits meines erstes Firebase app [Objective - C] und ich möchten den schnellsten Weg, wissen, eine Suche nach einem Feld zu implementieren, ich habe die documentation gelesen, und ich fand:Wie Sie eine Suchabfrage in Firestore Objective c machen?

ich einen Verweis machen das Dokument:

FIRQuery *capitalCities = 
     [[self.db collectionWithPath:@"cities"] queryWhereField:@"capital" isEqualTo:@YES]; 

Dann zeigen sie, wie die Suchabfrage zu machen:

[citiesRef queryWhereField:@"name" isGreaterThanOrEqualTo:@"San Francisco"]; 

das ist, was ich nicht bekommen, ich diesen Code implementiert, und wenn ich an:

[citiesRef queryWhereField:@"name" isGreaterThanOrEqualTo:@"Kar"]; 

Was ich bekommen ist (absteigend):

2017-10-12 18:53:36.138[2697:663963] SearchREsult: { 
    nombre = "victoria "; 
} 
2017-10-12 18:53:36.138[2697:663963] SearchREsult: { 
    nombre = karlo; 
} 
2017-10-12 18:53:36.138[2697:663963] SearchREsult: { 
    nombre = "karla "; 
} 
2017-10-12 18:53:36.139[2697:663963] SearchREsult: { 
    nombre = "V\U00edctor"; 
} 
2017-10-12 18:53:36.142[2697:663963] SearchREsult: { 
    nombre = "Ra\U00fal"; 
} 
2017-10-12 18:53:36.143[2697:663963] SearchREsult: { 
    nombre = "Ra\U00fal"; 
} 
2017-10-12 18:53:36.144[2697:663963] SearchREsult: { 
nombre = Pepe; 
} 
2017-10-12 18:53:36.145[2697:663963] SearchREsult: { 
    nombre = "Mar\U00eda"; 
} 

So sind die zweite und dritte Ergebnisse korrekt sind, aber ich bekomme mehr „trash“ Ergebnisse, die ich nicht brauchen.

Also meine Frage ist, wie isGreaterThanOrEqualTo und isLessThanOrEqualTo Firestor Methoden mit Strings arbeiten, wie „San Fransisco“ Dokumentation Beispiel, damit ich weiß, wenn ich eine einfache Suchabfrage mit einiger API-Methode erreichen kann, oder ich werde die Solution Alternatives umsetzen muß dass Google für kompliziertere Suchvorgänge sorgt.

Danke.

Antwort

0

Es klingt wie Sie versuchen, eine Reihe von Ergebnissen zu erhalten. In diesem Fall benötigen Sie beide and. Also:

[[citiesRef queryWhereField:@"name" isGreaterThanOrEqualTo:@"Kar"] 
      queryWhereField:@"name" isLessThan:@"Kas"] 

Dies wird Ihnen alle Dokumente, in denen name beginnt mit Kar.

+0

Aber in diesem Fall muss ich mit einer Methode kommen, um diese Abfrage zu verwalten, wenn ich die Suche von einer Suchleiste bekomme, muss ich mit whis manuell kommen? (Zum Beispiel lese den letzten Buchstaben aus dem Suchstring und finde den nächsten Buchstaben im Alphabet) –

+0

Ah ... ein üblicher Trick besteht darin, zu weniger als mit einem Suffix eines der letzten Zeichen in Unicode, z.B. "Kar \ uf8ff" '. Sehen Sie als Beispiel diese Dokumentationsseite für die Firebase Realtime Database, wo Sie denselben Trick verwenden würden: https://firebase.google.com/docs/database/admin/retrieve-data#range-queries –

+0

Sorry, aber ich bin immer noch verstehe es nicht, was wäre das Äquivalent von Firebase Beispiel in objective-c? '[[usersReference queryWhereField: @" nombre "istGreaterThanOrEqualTo: stringToSearch] queryWhereField: @" nombre "istLessThan: [NSString stringWithFormat: @"% @ \ uf8ff ", stringToSearch]]' –