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