【问题标题】:AngularFire2 orderByKey and startAtAngularFire2 orderByKey 和 startAt
【发布时间】:2018-01-26 20:12:58
【问题描述】:

我有以下数据库结构:

{
 "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 好像有问题?

【问题讨论】:

    标签: angular firebase firebase-realtime-database angularfire


    【解决方案1】:

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

    如果你有以下键

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

    并像查询它一样

    startsWith: "3"
    

    那么你会得到

    { "3", "4" }
    

    【讨论】:

    • 好的,那我怎样才能达到这个结果呢?必须有一种方法可以找到所有以特定字符串开头或包含特定字符串的键?
    • 如果搜索始终相同,您可以在每个对象上设置一个新值,例如:"ap1-A778ASDUASDJ8AS8DA" : { "enabled" : true, "color" : "blue", searchPattern: "ap1" },,然后使用query: { orderByChild: searchPattern, equalsTo: 'ap1' }
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多