2017-08-18 75 views
1

我有以下數據庫結構:AngularFire2 orderByKey和startAt

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

我試圖讓誰擁有一鍵啓動與「ap1-」的所有用戶,如下所示:

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-' 
      } 
     }); 
    } 
} 

的上面的代碼會返回ap1和ap2鍵。我在網上搜索,找不到任何方法來實現這一點。

我試着與equalTo ..當我把確切的正確的關鍵,它只發現了這一點。當我放入一個無意義的密鑰時,它什麼也找不到。

好像startAt有bug?

回答

2

你不能用這樣的firebase做到這一點。 「startsWith」所做的是從「ap1-」及其以上的所有密鑰中取回所有密鑰,而不是以「ap1-」作爲第一個字符的字符串。

如果你有一個下列鍵

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

,並質疑它像

startsWith: "3" 

,那麼你會得到

{ "3", "4" } 
+0

好了,我怎麼就能夠實現結果?必須有一種方法來查找所有以特定字符串開頭或包含特定字符串的密鑰? – flipcode

+1

如果搜索總是相同的,您可以在每個對象上都有一個新值,例如:''ap1-A778ASDUASDJ8AS8DA「:{ 」enabled「:true, 」color「:」blue「,searchPattern:」ap1「 }'然後用'查詢:{ orderByChild:是searchPattern, equalsTo: 'AP1' }' – avilao

+0

或者嘗試是這樣的:https://stackoverflow.com/questions/38618953/how-to-do-一,簡單的搜索功能於字符串中,火力數據庫 – avilao