firebase - Flutter - 在 Firestore 中删除文档会导致删除随机文档而不是所选文档
问题描述
“utenti”(用户)集合包含每个用户的文档,该文档又包含“salvataggi”(保存)集合以在应用程序中保存对象。
'salvataggi'(保存)中的每个文档都有一个自动生成的 id,其中包含一系列数据(准确地说是字符串)。
'salvataggi'(保存)中的文档可以通过将其他两个集合创建的对象始终保存在 FIrestore 中来添加。
当我想通过一个按钮从“salvataggi”(保存)集合中删除一个对象时,会删除一个随机文档,而不是与该对象对应的文档。
对象 1
final CollectionReference _usersRef =
FirebaseFirestore.instance.collection('utenti');
final User _user = FirebaseAuth.instance.currentUser;
//Add
Future _addToSaved() {
return _usersRef.doc(_user.uid).collection('salvataggi').doc().set({
'fonte': elenco.fonte,
'title': elenco.title,
'url': elenco.urlAvv,
'imageEv': elenco.urlAvv,
'p1': elenco.iconaProspettiva1,
'p1url': elenco.urlProspettiva1,
});
}
//Remove
Future _removeFromSaved() async {
CollectionReference userSaved =
_usersRef.doc(_user.uid).collection('salvataggi');
QuerySnapshot querySnap = await userSaved.get();
querySnap.docs[0].reference.delete();
}
对象 2
final CollectionReference _usersRef =
FirebaseFirestore.instance.collection('utenti');
final User _user = FirebaseAuth.instance.currentUser;
//Add
Future _addToSaved() {
return _usersRef.doc(_user.uid).collection('salvataggi').doc().set({
'fonte': widget.single.fonte,
'title': widget.single.title,
'url': widget.single.urlAvv,
'imageEv': widget.single.imageEvAvv,
'lastupdate': widget.single.dataAggiornamento,
'p1': widget.single.iconaProspettiva1,
'p1url': widget.single.urlProspettiva1,
});
}
//Remove
Future _removeFromSaved() async {
CollectionReference userSaved =
_usersRef.doc(_user.uid).collection('salvataggi');
QuerySnapshot querySnap = await userSaved.get();
querySnap.docs[0].reference.delete();
}
我究竟做错了什么?为什么会这样?
解决方案
当用户保存文档时,请尝试使用它保存该文档的 id,以便每当用户取消保存文档时。您可以将该未保存文档的 ID 传递给 Firestore。
它看起来像这样
Future _removeFromSaved(String docID) async {
CollectionReference userSaved =
_usersRef.doc(_user.uid).collection('salvataggi');
await userSaved.doc(docID).delete()
}
- 更新 -
您可以在将文档添加到 Firestore 后调用该then
方法保存文档 ID,然后对其进行更新
Future _addToSaved()async {
await _usersRef.doc(_user.uid).collection('salvataggi').add({
'fonte': widget.single.fonte,
'title': widget.single.title,
'url': widget.single.urlAvv,
'imageEv': widget.single.imageEvAvv,
'lastupdate': widget.single.dataAggiornamento,
'p1': widget.single.iconaProspettiva1,
'p1url': widget.single.urlProspettiva1,
}).then(docRef=>await _usersRef.doc(_user.uid).collection('salvataggi').doc(docRef.id).update({'id':docRef.id}));
}
推荐阅读
- android - android更新存储内容数据库
- ios - 来自 AVDepthData 的深度图与 Photoshop 中的 HEIC 文件深度数据不同
- javascript - 在 Angular7 应用程序中包含动态 JSON 数据
- reactjs - 如何使用 ReactJS 将 Laravel 项目完美部署到服务器
- javascript - React - 内联动态组件样式未更新 onMouseOver 和 onMouseOut 事件
- azure - 在 azure 中创建自定义图像失败
- matlab - 如何从同一类的另一个方法调用静态类方法?
- uwp - 如何在 Windows 10 中枚举 mDNS 服务?
- sql - 行列遍历
- docker - 创建 Pod 后如何让 Kubectl 运行容器