android - Firestore doc delete 预计会删除 1 个人,但也会删除所有类似的文档
问题描述
我正在使用 Firestore 数据库来存储有关连接到我的应用程序中会话的用户的信息。要离开,用户按下离开按钮,然后应该从数据库中删除他们自己的数据。这是我删除客户端的代码:
_deleteAClientFromDB() async {
//get specific user in users
var userLobby = await users
.where('lobbyCode', isEqualTo: _lobbyCode)
.where('userRole', isEqualTo: 2)
.where('userID', isEqualTo: _userID)
.get();
userLobby.docs.forEach((document) {
document.reference.delete();
});
}
此代码与我的功能非常相似,即从数据库中删除所有用户,并添加了用户 ID 的“位置”。这userID
是一个字符串字段,每个用户都是唯一的。但是,我很确定发生了什么,当我尝试在设备上运行此功能时,它会以某种方式在所有设备上运行该功能?这是我能想到的唯一原因,因为 ifuserID
与 firestore 中的不同,它不会被检索到。我用这个函数初始化以提取我的SharedPreferences
:
Future<String> _getData() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(
() {
_lobbyCode = (prefs.getString('lobbyCode'));
_userID = (prefs.getString('userID'));
_isHost = prefs.getBool('isHost') ?? false;
},
);
我不确定为什么该函数会删除带有userRole
of 2 的所有文档,而不仅仅是删除带有userID
of的文档_userID
(本地存储的数据)。有谁明白我做错了什么?
E/flutter ( 8795): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Invalid argument(s)
E/flutter ( 8795): #0 _StringBase.+ (dart:core-patch/string_patch.dart:267:57)
E/flutter ( 8795): #1 _LobbyWidgetState._deleteAClientFromDB (package:percepto/lobby.dart:350:46)
E/flutter ( 8795): #2 _LobbyWidgetState._showClientConfirmDialog.<anonymous closure> (package:percepto/lobby.dart:488:9)
似乎确实有问题_userID
,我尝试记录log("This is what userID is:" + _userID);
并遇到这些错误。我不确定为什么它可能是无效参数,因为它被初始化为空字符串并从设备的本地存储中设置。
解决方案
感谢您推荐我检查 _userID,在我看到日志错误后,我仔细检查了我设置的位置shared_preferences
,显然我命名了userID
id
. 所以我试图从一个不存在的首选项中提取数据。
推荐阅读
- typescript - 如何将对象的所有属性值用作类型?
- php - 请求数据表中第 0 行第 0 列 ajax 的未知参数“名称”
- javascript - TinyMCE imagetools_toolbar 位置
- xquery - 有没有办法让 xquery for...in 循环来评估由另一个函数动态创建为字符串的 xquery?
- jquery - 如何更新wordpress的jquery版本
- r - 如何计算数据集中的空单元格?
- git - 使用 gitkraken 和 git 登录代理的问题
- python-3.x - UnicodeEncodeError:'ascii' 编解码器无法在位置 29 编码字符 u'\u2013':序数不在范围内(128)
- ember.js - 如何在控制器复选框状态更改时重新加载模型?
- python - 如果聊天机器人问题得到回答,需要做一个标志吗?