我正在创建一个应用程序与Firebas Firestore作为数据库。在我的应用程序中,用户可以阻止其他用户,以排除他们从下一个查询。
我应该使用哪种数据库结构来执行Firestore查询?
当你阻止某人时,用户ID将被存储在你的用户文档中的一个数组中。Firestore查询只提供了“array-contains”操作符来基于数组值进行过滤。所以我需要查询“array-NOT-contains”,但Firestore没有提供。
数据库结构
users: {
user1:{
name: "Lorem Ipsum"
blockedUsersId: [
0: user1,
1: user2]
}
}
1条答案
按热度按时间ebdffaop1#
要实现此功能,可以创建一个名为“blocks”的单独集合,并将被阻止的用户存储在该集合中。“blocks”集合中的每个文档都包含两个字段:“blocker”和“blocked”,分别表示阻止用户和被阻止用户的ID。
查询用户时,可以使用Firestore“where”运算符,通过在“blocks”集合中的“blocker”字段上使用“array-contains”运算符来筛选出被阻止的用户。
例如,以下查询将返回未被ID为“user 1”的用户阻止的所有用户:
或者,您可以在“blocks”集合中的“blocker”字段上创建索引,这将允许您使用“where”运算符查询被阻止的用户。
例如,以下查询将返回被ID为“user 1”的用户阻止的所有用户:
然后,您可以使用被阻止用户的ID将其从最终的用户查询中排除。