AngularFire2 orderByKey和startAt

时间:2017-08-18 08:05:46

标签: angular firebase firebase-realtime-database angularfire

我有以下数据库结构:

{
 "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中有一个错误?

1 个答案:

答案 0 :(得分:2)

你不能像那样使用firebase。 'startsWith'的作用是从'ap1-'及以上检索所有键,而不是以'ap1-'作为第一个字符的字符串。

如果您有以下钥匙

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

并查询它

startsWith: "3"

然后你会得到

{ "3", "4" }