Запрос Firebase firestore для двух входов целое число / строка - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь получить данные из firestore на основе двух полей (localitate: string, buget: integer).

Запрос становится довольно подробным и все еще не работает должным образом ..


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(), а также добавить правильную функциональность фильтра в коллекции «перечисление» и «coleg»?

1 Ответ

1 голос
/ 09 июля 2020

Закажите по бюджету и измените его с "<=" на "> ="


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
}

...