为什么 equalTo number 只能在 FireBase 中查找字符串?

Why is equalTo number only finding strings in FireBase?

我正在尝试一个简单的查询:

@Input('jobId') id: number;

comments: FirebaseListObservable<any>;

this.comments = this.af.database.list('comments/jobComments', {
  query: {
    orderByChild: 'jobId',
    equalTo: <number>this.id
  }
}).map((array) => array.reverse()) as FirebaseListObservable<any[]>;

我有几个 jobId 是字符串,其余是数字。我很快就会把它们都变成数字。但由于某种原因,这只返回其 jobId 格式为字符串的结果,而不返回任何其 jobId 为整数的结果。

如果他们的 jobId 在 FireBase 中看起来像这样,上面的代码只返回评论:

jobId: "1"

但不是这个:

jobId: 1

<number> 是 TypeScript 转换。它是静态的,只是告诉 TypeScript 该值是 number.

在运行时,这毫无意义。如果 this.id 包含一个字符串,传递给 equalTo 的值将是一个字符串 - 而不是 一个数字 - 它只会匹配 "1"在 Firebase 中。

如果你想确保分配给 equalTo 的值是一个数字,你可以这样做:

query: {
  orderByChild: 'jobId',
  equalTo: Number.parseInt(this.id, 10)
}