首页 > 解决方案 > 将文档映射到有例外的列表

问题描述

我正在使用 firestore 将文档查询到自定义列表。但我想指定该文档是否包含当前用户 ID,它不应该放在列表中。

澄清一下:这是一堆卡片。每张卡都可以选择跳过。如果用户跳过它,他们的 id 将被放入该卡的名为“skipped”的字段中。因此,当前用户不应该再次看到该卡,因为该卡有一个字段表明他们的 id 已跳过它。

就像是:

List<CustomCard> cards =
        snapshot.documents.where(/* current ID DOESN'T exists in doc["skipped"], so adds to map*/).map((doc) => CustomCard.fromDocument(doc)).toList();

以下是我将用户 ID 添加到卡跳过字段的方式:

//On skip button pressed, call:
handleSkip() {
    cardRef.document(projectId).updateData({'skipped.$currentUid': true});
  }

如果当前用户 id 已跳过它,我该如何关闭堆栈上的卡片?

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


Cloud Firestore 中没有“不等于”或“不包含”查询。两种可能的解决方法是:

  1. 隐藏用户在客户端中喜欢的卡片。
  2. 保留用户不喜欢的所有卡片的列表,然后在用户喜欢该卡片时将其删除。

鉴于我想说的用例#1 似乎最可行。

另见:


推荐阅读