2017-08-18 1 views
1

Ich habe folgende Datenbankstruktur:AngularFire2 orderByKey und startat

{ 
"users" : { 
    "ap1-AXLKSD9ASLKDJJ0991" : { 
     "enabled" : true, 
     "color" : "red" 
    }, 
    "ap1-A778ASDUASDJ8AS8DA" : { 
     "enabled" : true, 
     "color" : "blue" 
    }, 
    "ap2-ASD88ASD8ASD8HAS8D" : { 
     "enabled" : true, 
     "color" : "red" 
    } 
    } 
} 

Ich versuche, alle Benutzer zu erhalten, der einen Schlüssel, die mit „ap1-“ haben, wie folgt:

import { Injectable } from '@angular/core'; 

import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database'; 

import * as firebase from 'firebase/app'; 

import { Observable } from 'rxjs/Observable'; 

@Injectable() 
export class FirebaseService { 
    // 
    // Database 
    userList: FirebaseListObservable<any>; 

    public constructor(
     public afDb: AngularFireDatabase) { 
    } 

    getUsers() { 
     return this.userList = this.afDb.list('/users', { 
      preserveSnapshot: true, 
      query: { 
       orderByKey: true, 
       startAt: 'ap1-' 
      } 
     }); 
    } 
} 

Die Der obige Code gibt jedoch ap1- und ap2-Schlüssel zurück. Ich werde online gesucht und finde keinen Weg, dies zu erreichen.

Ich versuchte mit equalTo .. wenn ich den genau richtigen Schlüssel einfüge, findet es nur dies. Wenn ich einen Nonsense-Schlüssel einfüge, findet er nichts.

Es scheint, als gäbe es einen Fehler in startAt?

Antwort

2

Sie können es nicht mit Firebase so machen. Was 'startsWith' tut, ist, alle Schlüssel von 'ap1-' und höher abzurufen, nicht die Zeichenfolgen, die 'ap1-' als erste Zeichen haben.

Wenn Sie eine der folgenden Tasten

{"1", "2", "3", "4"} 

und abgefragt es wie

startsWith: "3" 

dann hätte man

{ "3", "4" } 
+0

Ok bekommen, so wie würde ich in der Lage sein, das zu erreichen, Ergebnis? Es muss eine Möglichkeit geben, alle Schlüssel zu finden, die mit einer bestimmten Zeichenfolge beginnen oder diese enthalten. – flipcode

+1

Wenn die Suche immer gleich ist, können Sie einen neuen Wert für jedes Objekt haben, wie zum Beispiel: '" ap1-A778ASDUASDJ8AS8DA ": { " aktiviert ": true, " color ":" blau ", searchPattern:" ap1 " }, 'und verwenden Sie dann' Abfrage: { orderByChild: search, equalsTo: 'AP1' } ' – avilao

+0

Oder so etwas wie dies versuchen: https://stackoverflow.com/questions/38618953/how-to-do- a-simple-search-in-string-in-firebase-Datenbank – avilao

Verwandte Themen