【发布时间】:2021-07-22 02:48:11
【问题描述】:
我有一个 Firestore 数据库,它具有以下层次结构:
collection("notes") > document(currentUserId) > collection("mynotes") > document(auto-generated-key) > items...
我已将数据添加到 Firestore,如下所示:
mAuth = FirebaseAuth.getInstance();
database = FirebaseFirestore.getInstance();
//here scheduleModel is a model class with constructor(String, boolean, String) with getters and
//setters for three of them
scheduleNoteModel = new ScheduleNote(noteTitle, isImp, strDate);
我已经添加了这样的注释项。
database.collection("notes").document(mAuth.getUid())
.collection("mynotes")
.document() //generated id automatically...
.set(scheduleNoteModel)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getContext(), "data added ...", Toast.LENGTH_SHORT).show();
etNoteTitle.setText("");
//dismiss (hide) the bottom sheet after adding item
BottomSheetScheduleFragment.this.dismiss();
//refresh the fragment
}
});
问题是在删除项目时取回该 ID。我知道有很多类似的问题,其中一些很好,但我无法解决它们。我查看了this link 解决方案,但我无法解决
在适配器中
holder.deleteNoteIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteNote(noteModel);
}
});
Method to delete
private void deleteNote(ScheduleNote note, int itemPosition, View view) {
mAuth = FirebaseAuth.getInstance();
database = FirebaseFirestore.getInstance();
//getting the doc id of auto-generated code in Firestore.
String id = database.collection("notes").document(mAuth.getUid()).collection("mynotes").document().getId();
Toast.makeText(context, "position " + itemPosition + "doc id " + id, Toast.LENGTH_SHORT).show();
database.collection("notes").document(mAuth.getUid())
.collection("mynotes")
//.document("72NMkKY73CXHVN7DFE8W") get that id automatically
.document(id)
.delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//notifyDataSetChanged();
Snackbar snackbar = Snackbar.make(view, "Note Deleted successfully", Snackbar.LENGTH_SHORT);
snackbar.show();
}
});
}
上述变量中的 id 与真实 id 不匹配。如何获得该 ID?
我基本上想要两个信息:
- 如何在将文档 ID 添加到 Firestore 之前获取文档 ID,以便我可以将其附加到我的模型类,然后根据该 ID 删除,有什么解决方案吗?
- 或者,只是通过我在 RecyclerView 中单击项目时传递的模型类获取文档 ID?
我实际上做了很多研究,但无法弄清楚。任何快速帮助将不胜感激,谢谢。
【问题讨论】:
-
调用
document().getId()只会生成一个新的唯一ID,因此该文档将不存在。与其关注您不知道的内容(ID),不如关注您对要删除的文档的了解做什么。假设集合中有 100 个文档,您如何决定要删除哪些文档?一旦知道这一点,您就可以编写一个查询来删除这些文档,如下所示:stackoverflow.com/a/47180442。另请参阅 Doug 的回答:stackoverflow.com/a/63972796 -
@FrankvanPuffelen 我只想得到那个 ID,这是我的主要观点。
-
当您从 db 获取数据或添加新任务时,您可能希望将文档 ID 存储在 Notes 类中。
-
@Dharmaraj 是的,但在添加注释之前我无法找到文档 ID。那就是问题所在。如果您知道,任何帮助都会很棒。不太复杂,但我还没有找到解决方案。
-
您实际上可以先在 firestore 中添加数据,然后在成功侦听器中包含包含文档键的响应。然后添加成功后,使用scheduledNote类构造对象。
标签: java android firebase google-cloud-firestore