动态查询Firestore的优雅方式

时间:2018-11-22 12:29:37

标签: swift firebase google-cloud-datastore google-cloud-firestore

是否有任何优雅的方法可以根据条件向查询中动态添加where条件?例如,默认查询为

query = collectionReference
.whereField(SaleProperties.saledate.rawValue, isGreaterThanOrEqualTo: startDate)
.whereField(SaleProperties.saledate.rawValue, isLessThanOrEqualTo: endDate)
.whereField(SaleProperties.isapprovedbystoremanager.rawValue, isEqualTo: true)

,我有4个不同的条件,例如state, division, store, user。当选择了这些过滤器后,我需要相应地添加条件。假设我选择了state,则查询为

query = collectionReference
    .whereField(SaleProperties.state.rawValue, isEqualTo: selectedState)
    .whereField(SaleProperties.saledate.rawValue, isGreaterThanOrEqualTo: startDate)
    .whereField(SaleProperties.saledate.rawValue, isLessThanOrEqualTo: endDate)
    .whereField(SaleProperties.isapprovedbystoremanager.rawValue, isEqualTo: true)

同样,如果我选择了state and division

    query = collectionReference
    .whereField(SaleProperties.state.rawValue, isEqualTo: selectedState)
    .whereField(SaleProperties.division.rawValue, isEqualTo: selectedDivision)
    .whereField(SaleProperties.saledate.rawValue, isGreaterThanOrEqualTo: startDate)
    .whereField(SaleProperties.saledate.rawValue, isLessThanOrEqualTo: endDate)                 
   .whereField(SaleProperties.isapprovedbystoremanager.rawValue, isEqualTo: true)

以上示例仅针对两个条件进行了说明。像这样,我需要检查4个不同的条件以及其他条件的组合,组合的可能性将像24个查询一样。因此,如果有人知道构成查询的优雅方式,那就太好了。

*********答案********

使用默认查询(请参见默认查询),我检查条件,例如,如果选择了state,则只需向默认查询添加一个条件

    if(isStateSelected == true)
    {
   query =  query.whereField(SaleProperties.state.rawValue, isEqualTo: selectedState)
    }

同样,如果选择了division

    if(isDivisionSelected == true)
    {
  query = query.whereField(SaleProperties.division.rawValue, isEqualTo: selectedDivision)
    }

因此,如果条件为true,则会将其他条件添加到默认查询中

0 个答案:

没有答案