Flutter : 检查子集合中是不是有特定的数据

Posted

技术标签:

【中文标题】Flutter : 检查子集合中是不是有特定的数据【英文标题】:Flutter : check if there's specific data in the subcollectionFlutter : 检查子集合中是否有特定的数据 【发布时间】:2021-12-29 22:51:10 【问题描述】:

我正在创建一个帖子,将数据上传到 Firestore 的子集合并将其带到 MyBookmark 页面。最好创建一个子集合并简单地上传数据。现在我想在这里添加一个“防止数据重复”功能。 如果帖子已保存在书签中,请勿上传。

为此,我想在按下书签按钮时检查帖子是否已经在收藏夹中。

        IconButton(
          onPressed: () async 
            //get userModel
            UserModelState _userModelstate =
                Provider.of<UserModelState>(context, listen: false);

            //=========================================
            //duplication data test
            DocumentReference bookmarkRef = Firestore.instance
                .collection(COLLECTION_USERS)
                .document(_userModelstate.userModel.userKey)
                .collection(COLLECTION_BOOKMARk)
                // .where(KEY_BOOKMARK_PRODUCTKEY, isEqualTo: productKey)
                .document();

            DocumentSnapshot bookmarkSnapshot = await bookmarkRef.get();

            //test (return "No exist")
            if(bookmarkSnapshot.exists) 
              print("Yes exist");
             else 
              print("No exist");
            

我尝试编写代码来检查集合中是否有数据,但它总是打印为“不存在”。 如何确认集合中是否存在特定文档?

谢谢。

【问题讨论】:

【参考方案1】:

如果productKey 在用户的Bookmark 集合中应该是唯一的,请考虑使用productKey 作为文档ID。由于文档 ID 在其集合中根据定义是唯一的,因此使用它们可以保证产品密钥的唯一性,而无需为它编写任何代码。


也就是说,您当前的代码无法运行,因为您调用了document()。每当您在没有任何参数的情况下调用document() 时,它都会生成对新的唯一文档的引用。而且由于您立即在该引用上调用 get(),因此该文档将(也:根据定义)尚不存在。

要检查具有特定产品 ID 的文档是否存在,您需要运行查询:

CollectionReference bookmarksRef = Firestore.instance
    .collection(COLLECTION_USERS)
    .document(_userModelstate.userModel.userKey)
    .collection(COLLECTION_BOOKMARk);
Query bookmarkQuery = bookmarksRef.where(KEY_BOOKMARK_PRODUCTKEY, isEqualTo: productKey);

QuerySnapshot bookmarkSnapshot = await bookmarkQuery.get();

if (bookmarkSnapshot.size > 0) 
  print("product key already in use");

【讨论】:

以上是关于Flutter : 检查子集合中是不是有特定的数据的主要内容,如果未能解决你的问题,请参考以下文章

无法从 StreamBuilder (Flutter) 查询子集合

在地图上显示 firebase 子集合的引脚 - Flutter

Flutter Firebase云函数打字稿

有没有办法获取子集合中的所有文档(Firestore)

Flutter Firebase 获取特定多个文档的子集合数据

来自特定文档 Firestore 安全性的通配符子集合