You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:45:03