2017-10-04 2 views

Antwort

9

Sie können, aber es ist schwierig. Sie müssen nach Dokumenten suchen, die größer oder gleich der gewünschten Zeichenfolge und kleiner als ein Nachfolgerschlüssel sind.

Zum Beispiel Dokumente zu finden, ein Feld 'foo' starrt mit 'bar' enthalten, würden Sie abfragen:

db.collection(c) 
    .where('foo', '>=', 'bar') 
    .where('foo', '<', 'bas'); 

Dies ist eigentlich eine Technik, die wir für das Scannen von Dokumentensammlungen in der Client-Implementierung verwenden, um einen Pfad entsprechen. Unser successor key computation wird von einem scanner aufgerufen, der nach allen Schlüsseln sucht, die mit der aktuellen Benutzer-ID beginnen.

+0

Was ist der Nachfolgerschlüssel? –

+0

Der Nachfolgerschlüssel begrenzt die Abfrage so, dass die Ergebnisse nur Zeichenfolgen enthalten, die mit einer bestimmten Zeichenfolge beginnen. Ohne die Suche nach nur foo> = 'bar' würde auch 'zoo' zurückgegeben, da diese Zeichenfolge auch lexikographisch größer als bar ist. –

6

gleich wie von Gil Gilbert beantwortet. Nur eine Verbesserung und einige Beispielcode. Verwendung String.fromCharCode und String.charCodeAt

var strSearch = "start with text here"; 
var strlength = strSearch.length; 
var strFrontCode = strSearch.slice(0, strlength-1); 
var strEndCode = strSearch.slice(strlength-1, strSearch.length); 

var startcode = strSearch; 
var endcode= strFrontCode + String.fromCharCode(strEndCode.charCodeAt(0) + 1); 

dann Code-Filter wie unten.

db.collection(c) 
.where('foo', '>=', startcode) 
.where('foo', '<', endcode); 

Arbeiten auf jeder Sprache und jeder Unicode.

Warnung: Alle Suchkriterien in Firestore ist CASE SENSITIVE.

+0

Ist es möglich, ein oder zwei Felder im selben Dokument zu bearbeiten? Wie: 'where ('foo', '> =', Startcode) .where ('foo', '<', endcode) .where ('bar', '<', endcode) .where ('bar', < ', endcode); ' – Erik

+0

Vielleicht trifft dies die [Zusätzlich können Sie nur Bereichsvergleiche (<, <=, >,> =) in einem einzigen Feld ausführen] (https://firebase.google.com/docs/firestore/query-data/Anfragen) – Erik

Verwandte Themen