关于 javascript:firestore 查询多个过滤器以在 react-native 中检索集合

firestore query multiple filter to retrieve collection in react-native

本问题已经有最佳答案,请猛点这里访问。

Firestore 查询条件
Firestore
查询结果的console.log
Console.log
我是反应原生 Firebase Firestore 的新手。
我正在设计一个应用程序,其功能是用户应该能够在三个条件中的任何一个上搜索注册用户:

  • 按名称

  • 按专长

  • 按位置

  • 如果用户在这些字段中明确键入,我的代码将从 firestore

    中检索过滤结果

    反应原生代码从firestore中检索:

    1
    2
    3
    4
    5
    6
    7
    var db = firebase.firestore();
        var routeRef = db.collection("users");
        var queryResult = routeRef
    .where(("Name","==", NameInput)
    .where("Expertise","==", ExpertiseInput)
    .where("Location","==" , LocationInput))
    .get().then(function(snapshot){/* ... */}

    场景:
    如果用户没有在 UI 中为任何一个字段输入任何搜索条件,比如"位置",在这种情况下,我不想从 firestore 为该条件设置过滤器。
    这意味着,预期的代码应该是:

    1
    2
    3
       var queryResult = routeRef
        .where(("Name","==", NameInput)
        .where("Expertise","==", ExpertiseInput)

    问题:
    我不确定如何根据用户是否输入 UI 来动态设置 .where 条件。
    有人可以帮忙吗?

    这还是没有得到查询结果


    where() 函数返回一个Query 对象(它允许您首先查询多个where() 条件)。因此,您可以有条件地"保存逐步进度"。像这样的东西:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const routeRef = db.collection("users");
    const nameFilter = NameInput ? routeRef.where("Name","==", NameInput) : routeRef;
    const expertiseFilter = ExpertiseInput ? nameFilter.where("Expertise","==", ExpertiseInput) : nameFilter;
    const locationFilter = LocationInput ? expertiseFilter.where("Location","==", LocationInput) : expertiseFilter;
    locationFilter.get().then(snapshot => {
       // The snapshot returned by `where().get()` does not have a `data()` reference since it returns multiple documents, it has `docs` property which is an array of all the documents matched
       snapshot.docs.forEach(doc => {
         const docData = { ...doc.data(), id: doc.id };
         console.log(docData);
    })