【问题标题】:Firestore query with empty string , 'any' or 'all'带有空字符串、“任意”或“全部”的 Firestore 查询
【发布时间】:2021-10-18 02:30:27
【问题描述】:

我的网站上有过滤器,我需要根据过滤器中的输入检索数据。过滤器的某些字段可以为空(''),我希望能够忽略基本上与这些字段相关的那些查询。 像这样的

//fields
const { country, age, gender, contract, budget_low, budget_high } = queries;

//query
db.collection("users")
        .where("country", "in", country === "" ? "any" : "Nigeria")
        .where("gender", "in", gender === "" ? "any" : "Male")
        .where("age", "in", age === "" ? "any" : "21")
        .get()
        .then((querySnapshot) => {
          var data = [];
          querySnapshot.forEach((doc) => {
            data.push(doc.data());
          });
          setPeers(data);
        })
        .catch((error) => {
          console.log("Error getting documents: ", error);
        });

如果字段为空 (''),有没有办法使用“任何”或“全部”,这样我可以有条件地检索所有数据(如果存在过滤器字段)?

【问题讨论】:

    标签: javascript reactjs firebase google-cloud-firestore


    【解决方案1】:

    您需要动态创建查询,并且只为用户实际选择的值添加条件。

    let query = db.collection("users");
    
    if (country !== "") query = query.where("country", "==", country);
    if (gender !== "") query = query.where("gender", "==", gender);
    if (age !== "") query = query.where("age", "==", age);
    
    query.get()...
    

    在新的模块化/v9 语法中,应该是:

    let conditions = []
    
    if (country !== "") conditions.push(where("country", "==", country));
    if (gender !== "") conditions.push(where("gender", "==", gender));
    if (age !== "") conditions.push(where("age", "==", age));
    
    let query = query(collection(db, "users"), ...conditions);
    
    getDocuments(query)...
    

    【讨论】:

    • 您好,请您编辑网页版 9(模块化)的答案
    • 完成。 ?........
    • 感谢您找到失踪的传播运算符@Dharmaraj!
    猜你喜欢
    • 2018-06-16
    • 2013-07-04
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多