firebase 如何获取Firestore中除用户文档中块数组列表中的用户之外的所有用户?

ykejflvf  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在创建一个应用程序与Firebas Firestore作为数据库。在我的应用程序中,用户可以阻止其他用户,以排除他们从下一个查询。
我应该使用哪种数据库结构来执行Firestore查询?
当你阻止某人时,用户ID将被存储在你的用户文档中的一个数组中。Firestore查询只提供了“array-contains”操作符来基于数组值进行过滤。所以我需要查询“array-NOT-contains”,但Firestore没有提供。

数据库结构

users: {
   user1:{
      name: "Lorem Ipsum"
      blockedUsersId: [
         0: user1,
         1: user2]
           }
         }
ebdffaop

ebdffaop1#

要实现此功能,可以创建一个名为“blocks”的单独集合,并将被阻止的用户存储在该集合中。“blocks”集合中的每个文档都包含两个字段:“blocker”和“blocked”,分别表示阻止用户和被阻止用户的ID。
查询用户时,可以使用Firestore“where”运算符,通过在“blocks”集合中的“blocker”字段上使用“array-contains”运算符来筛选出被阻止的用户。
例如,以下查询将返回未被ID为“user 1”的用户阻止的所有用户:

db.collection("users").where("id", "array-contains", "user1")

或者,您可以在“blocks”集合中的“blocker”字段上创建索引,这将允许您使用“where”运算符查询被阻止的用户。
例如,以下查询将返回被ID为“user 1”的用户阻止的所有用户:

db.collection("blocks")
    .where("blocker", "==", "user1")
    .get()
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            // doc.data().blocked contains the ID of the blocked user
        });
    });

然后,您可以使用被阻止用户的ID将其从最终的用户查询中排除。

相关问题