【问题标题】:Firebase firestore query for two inputs integer/stringFirebase Firestore 查询两个输入整数/字符串
【发布时间】:2020-07-09 10:41:55
【问题描述】:

我正在尝试根据 2 个字段(localitate:string、buget:integer)从 firestore 获取数据。

查询变得非常冗长,但仍然无法按预期工作..


function get_collection(){

    let ref = firebase.firestore()
    
    if (store.form_data.optiune === "camera") {
        ref = ref.collection("listing")
    } else if (store.form_data.optiune === "coleg") {
        ref = ref.collection("user")
    }
    return ref
}


function build_query(){
    
    let ref = get_collection()

    let localitate = store.form_data.localitate
    let buget      = Number(store.form_data.buget)
    
    // Build query
    if (localitate && buget){   
        console.info("Filtru localitate && buget: ", localitate, buget)
        ref = ref.where("localitate", "in", [localitate]).where("buget", "<=", buget)         
    }
    else if (localitate){
        console.info("Filtru localitate: ", localitate)
        ref = ref.where("localitate", "in", [localitate])                  
    }
    else if (buget){
        console.info("Filtru buget: ", buget)
        ref = ref.where("buget", "<=", buget)
    }

    // Add limit of items
    if (store.last_ref === undefined) {
        ref = ref.limit(items_per_page)
    } 

    console.info("Last ref is ", store.last_ref)
        
    if (localitate && store.last_ref !== undefined) {
        
        ref = ref.orderBy(firebase.firestore.FieldPath.documentId())
            .startAfter(store.last_ref)
            .limit(items_per_page)    
    } 
    else if (buget && store.last_ref !== undefined) {
        ref = ref.orderBy("buget")
                .startAfter(store.last_ref)
                .limit(items_per_page)   
    }

    return ref
}

如何保持每个get() 上的项目限制,并为“listing”和“coleg”集合添加适当的过滤功能?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    按预算排序并将其从“=”

    
    function build_query(){
        
        let ref = get_collection()
    
        let localitate = store.form_data.localitate
        let buget      = Number(store.form_data.buget)
    
        console.info("Filters: ", localitate, buget)
        
        // Build query
        if (localitate && buget){   
            console.info("Filtru localitate && buget: ", localitate, buget)
            ref = ref.where("localitate", "in", [localitate]).where("buget", ">=", buget)         
        }
        else if (localitate){
            console.info("Filtru localitate: ", localitate)
            ref = ref.where("localitate", "in", [localitate])                  
        }
        else if (buget){
            console.info("Filtru buget: ", buget)
            ref = ref.where("buget", ">=", buget)
        }
    
        // Add limit of items
        if (store.last_ref === undefined) {
            ref = ref.limit(items_per_page)
        } 
    
        if (buget && store.last_ref !== undefined) {
            console.info("Sort by buget", buget, store.last_ref)
            ref = ref.orderBy("buget")
                .startAfter(store.last_ref)
                .limit(items_per_page)
        }
    
        else if (store.last_ref !== undefined) {
            console.info("Sort by id", store.last_ref)
            ref = ref.orderBy(firebase.firestore.FieldPath.documentId())
                .startAfter(store.last_ref)
                .limit(items_per_page)    
        }
            
        console.info("Last ref is ", store.last_ref)
    
        return ref
    }
    
    

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 2021-12-04
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 2020-06-28
      • 2018-06-16
      相关资源
      最近更新 更多