为什么 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)
}
我正在尝试一个简单的查询:
@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)
}