firestore query multiple filter to retrieve collection in react-native
本问题已经有最佳答案,请猛点这里访问。
Firestore 查询条件
查询结果的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 条件。
有人可以帮忙吗?
这还是没有得到查询结果
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); }) |