如何使用Java获取Firestore自动生成的文档ID以更新文档数据?
Java获取Firestore自动生成文档ID的实现方案
完全可以通过Java代码获取Firestore自动生成的文档ID,针对你描述的安卓端用户保存多个Event的需求,具体实现逻辑如下:
1. 获取Event文档自动ID的两种场景
场景1:新建Event文档时获取ID
创建文档前先调用document()生成带自动ID的空文档引用,直接调用getId()即可拿到生成的ID,再写入数据即可:
// 获取Event集合引用 CollectionReference eventsRef = FirebaseFirestore.getInstance().collection("Event"); // 生成带自动ID的文档引用,此时数据还未写入数据库 DocumentReference newEventRef = eventsRef.document(); String eventId = newEventRef.getId(); // 此处即可拿到自动生成的文档ID // 写入Event数据到该文档 Event event = new Event(/* 你的Event字段参数 */); newEventRef.set(event);
场景2:查询已有Event列表时获取ID
查询Event集合拿到结果后,遍历每个文档快照调用getId()即可获取对应文档的ID:
eventsRef.get().addOnCompleteListener(task -> { if (task.isSuccessful()) { for (QueryDocumentSnapshot doc : task.getResult()) { String eventId = doc.getId(); // 拿到已有Event的自动ID Event event = doc.toObject(Event.class); // 后续业务逻辑处理 } } });
2. 实现用户保存多个Event的逻辑
推荐用数组类型存储用户保存的Event ID集合,更新时用FieldValue.arrayUnion()新增ID,不会覆盖已保存的内容,也不会重复插入同个ID:
// 拿到当前登录用户的文档引用 String uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); DocumentReference userRef = FirebaseFirestore.getInstance().collection("User").document(uid); // 新增保存的Event ID userRef.update("Save Event", FieldValue.arrayUnion(eventId)) .addOnSuccessListener(aVoid -> { // 保存成功处理 }) .addOnFailureListener(e -> { // 异常处理 });
注意:如果用户文档还不存在Save Event字段,第一次写入时用set()加合并参数避免覆盖其他字段:
Map<String, Object> data = new HashMap<>(); data.put("Save Event", Collections.singletonList(eventId)); userRef.set(data, SetOptions.merge());
如果需要取消保存某个Event,替换为FieldValue.arrayRemove(eventId)即可移除对应ID。
内容的提问来源于stack exchange,提问作者PI PI NAN
相关产品推荐
相关产品推荐

