javascript - AngularFirestore - 动态更新查询
问题描述
我有以下查询:
loadData(settings: any): Observable<any[]> {
const ref = this.db.collection('data').ref
.orderBy('simpleID', 'desc')
.where('isVerified', '==', true)
.limit(5);
// Gender filter
if (settings.includeMales && !settings.includeFemales) {
ref.where('gender', '==', 'm');
} else if (!settings.includeMales && settings.includeFemales) {
ref.where('gender', '==', 'f');
}
return this.db.collection('confessions', ref => ref)
.valueChanges();
我想根据settings
对象动态应用过滤器。
如何使用 ref 变量并将其传递给collect()
Angularfire2 的方法?
解决方案
每次调用一个where()
或其他方法时,它实际上都会返回一个新查询。所以你只需要确保捕获每个调用的查询。
var query = this.db.collection('data').ref
.orderBy('simpleID', 'desc')
.where('isVerified', '==', true)
.limit(5);
if (settings.includeMales && !settings.includeFemales) {
query = query.where('gender', '==', 'm');
} else if (!settings.includeMales && settings.includeFemales) {
query = query.where('gender', '==', 'f');
}
return this.db.collection('confessions', ref => query).valueChanges();
推荐阅读
- java - minimax tic-tac-toe 算法总是错误地将“X”或“O”放在下一个可用位置
- php - 如果列被另一个表引用,防止行删除 PHP | 拉拉维尔 | mysql
- c# - 如何读取 8 位图像文件?
- c# - 使用 C# RSACryptoServiceProvider 类生成 SSH Putty 私有对
- c++ - cin 如何区分空格和换行符?
- c# - 使用 ECC 加密证书签署令牌
- java - Log4j2 异步记录器默认缓冲区大小
- bash - bash脚本中没有这样的文件错误来列出文件
- ruby-on-rails - 如何使用 Active Record 查询您在 Rails 中查找的另一条记录的相邻先前记录?
- python - TypeError:字符串对象不可调用