约会应用程序 - 我需要在 Firebase Firestore 中使用哪种数据库结构来查询除不喜欢我的用户之外的所有用户?

Posted

技术标签:

【中文标题】约会应用程序 - 我需要在 Firebase Firestore 中使用哪种数据库结构来查询除不喜欢我的用户之外的所有用户?【英文标题】:Dating app - Which database structure do I need in Firebase Firestore to query all users except those who disliked me? 【发布时间】:2019-08-25 05:09:27 【问题描述】:

我正在使用 React NativeFirebase Cloud Firestore 创建一个约会应用。在我的应用中,用户可以不喜欢其他用户以将他们排除在下一个查询之外。

我应该使用哪种数据库结构来执行 Firestore 查询


当您不喜欢某人时,用户 ID 将存储在您的用户文档中的一个数组中。 Firestore 查询仅提供“array-contains”运算符来根据数组值进行过滤。所以我需要查询“array-NOT-contains”,但 Firestore 不提供。


我的 Firestore 数据库结构

collection('user').doc('userID').match.dislike[dislikedUserID1, dislikedUserID2,...]

screenshot: Firestore Database

【问题讨论】:

【参考方案1】:

你说得对,where 没有提供像“array_does_not_contain”这样的子句。只需做一个不太合格的查询并从结果中减去。对于广受欢迎的人来说,这可能是一个浪费的查询,但假设大多数人都很可爱......

const adorableMe = firebase.auth().currentUser
collection('user').where(/* they might think I'm a cutie pie */).get().then(snapshot => 
    // filter result to exclude the (tiny!) set of users who don't fancy me
    return snapshot.docs.filter(doc => !doc.data().dislikes.includes(adorableMe.id))
)

【讨论】:

你提出的这个查询,我有一个问题。假设集合“用户”有 500 个文档,在处理查询(过滤器)时,我限制了 20 个用户返回。在该特定操作中将收取多少“读取”Firestore?用户收藏总数中的 500 个还是我实际需要的 20 个? @carrasc0,我不是很有信心,但我认为将结果集限制为 20 将使您收取 20 的费用,而不是 500。但是,对于偏移量来说,情况并非如此。看这里...firebase.google.com/docs/firestore/pricing 是的,这很令人困惑,因为一个经常使用的案例是“引用”集合中的大量文档,用游标处理它并返回合理的数量(例如 20)。类似于您上面的示例。不幸的是,在官方文档中我还没有找到这个案例的解释。 嘿@carrasc0,如果firebase 收取总数中的500 或20,你有没有找到这个问题的答案,我想知道同样的事情。 firebaser here 如果您将查询限制为(最多)返回 20 个结果,您将需要为(最多)20 次文档读取付费。

以上是关于约会应用程序 - 我需要在 Firebase Firestore 中使用哪种数据库结构来查询除不喜欢我的用户之外的所有用户?的主要内容,如果未能解决你的问题,请参考以下文章

来自 Firebase 的应用(Android 或 iOS)中的提醒通知

Firebase 安全性和电话身份验证

在firebase中存储空数组

订阅和取消订阅主题 - firebase

如何获取片段内在firebase中注册的用户数?

ArrayList add() 有时不会将从 Firebase 获取的元素添加到 ArrayList