如何在反应原生 Firestore 中过滤 TRUE FALSE 选项

Posted

技术标签:

【中文标题】如何在反应原生 Firestore 中过滤 TRUE FALSE 选项【英文标题】:How filter TRUE FALSE option in react native firestore 【发布时间】:2022-01-10 02:31:50 【问题描述】:

我做了一个过滤器,即男人可以看到女人,女人可以看到男人 这意味着 用户数据有 ShowMen : true for women user ShowWomen : 适用于男性用户

当从 firestore 获取快照时 它将返回配置文件状态

const [profiles,setProfiles] = useState([]);
 
useEffect(() => 
 
  let unsub;

    
  const fetchCards = async()=>
      
    unsub = onSnapshot(collection(db,'users'),
    snapshot=>
      setProfiles(
        snapshot.docs
        .filter(doc=>
         ((doc.id!==user.uid)&&(doc.showMen==true&&doc.gender==='male'))
            || ((doc.id!==user.uid)&&(doc.showWomen==true&&doc.gender==='female'))
         
          )
        .map(
          doc=>(
            id :doc.id,
            ...doc.data()
          )
        )
      )
    )//not show already pass/swipe users
  

  fetchCards();
  return unsub;

, [])
 


我无法过滤掉我想要的 doc.id !== user.uid 表示经过身份验证的用户无法在搜索列表中看到他的个人资料视图 之后,如果来的数据是 showMen true 并且性别为女性,则配置文件数组列表会得出这个结果并显示数据 如果来的数据是 showWomen true 和 gender male ,profile 数组会得出这个结果并显示数据

最后我想要的是

如果用户选择 ShowMen 选项为真,她将只看到男性 如果用户选择 ShowWomen 选项为真,他将只看到女性

如何在 filter() 中实现这个逻辑 有人能帮我吗 我需要这个 谢谢

【问题讨论】:

【参考方案1】:

此数据过滤应在后端完成,以避免下载不必要的文档。

为了让我们的生活更轻松,让我们重新定义我们的user 数据模型如下:


  s_989777: 
    age: 25,
    displayName: "Roberto Carlos",
    gender: "male",
    interestedIn: "female",
  ,

  ab9uyrtt: 
    age: 21,
    displayName: "Christina  Liz",
    gender: "female",
    interestedIn: "male",
  ,
;

我添加了新记录interestedIn = [gender]。此值应等于现有用户的gender 之一。 malefemale

有了这个新的数据模型,我们可以使用 Firestore 过滤查询。


import  collection, query, where,getDocs  from "firebase/firestore";
const usersRef = collection(db, "users");

// Create a query against the collection.

const interestedIn =  currentUser.interestedIn
const q = query(usersRer, where("gender", "==", interestedIn));

const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => 
  // doc.data() is never undefined for query doc snapshots
  console.log(doc.id, " => ", doc.data());
);

结果将是gender用户当前感兴趣的用户数组

【讨论】:

可以直接定义const interestedIn = currentUser.interestedIn 不带快照吗,是未定义吗? const interestedIn = currentUser.interestedIn 假设当应用程序加载或用户登录时,您会加载有关该用户的信息并保存在全局存储或异步存储中。 `currentUser` 是当前正在使用应用的用户信息的占位符。 简单地通过你的想法得到答案。谢谢 很高兴听到这个消息。这是我在 *** 上的第一个答案。联系我了解未来的一些与 Firebase 相关的问题。同时,祝黑客愉快!

以上是关于如何在反应原生 Firestore 中过滤 TRUE FALSE 选项的主要内容,如果未能解决你的问题,请参考以下文章

根据firebase / firestore文档在应用程序图标徽章通知中反应本机

Firestore返回null反应原生android

如何在反应原生中过滤多个选择下拉字段中的数组值

在本机反应中获取和返回 Firestore 集合

Firestore 没有从反应本机日历中获取字符串

获取分页反应的firestore收集记录计数[重复]