如何在Android Firestore的文档字段中保存文档ID?

时间:2019-10-18 19:24:54

标签: java android firebase google-cloud-firestore

我能够将文档保存到Firestore,但我也想将新保存的文档ID也保存到同一文档中,我正在尝试以下示例,但效果不佳

 String id = db.collection("user_details").document().getId();

                                Map map = new HashMap<>();
                               map.put("username", username);
                                map.put("email", email);
                                map.put("id", id);




                                UserRef.document(id).set(map).addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {

                                        //progressbar invisible;
;

                                    }
                                });

2 个答案:

答案 0 :(得分:1)

每次致电document()时,您都会获得一个新的唯一ID。因此,请确保只调用一次,所以您只需处理一个ID。

首先获取DocumentReference:

DocumentReference ref = db.collection("user_details").document();

获取其ID:

String id = ref.getId();

然后编写要发送的数据:

Map map = new HashMap<>();
map.put("username", username);
map.put("email", email);
map.put("id", id);

最后,将这些数据放在前面引用的文档中:

ref.set(map)...

答案 1 :(得分:0)

为了能够首先将您的 ID 保存在文档中,您需要创建一个。问题是 ID 是在创建文档的同时创建的。但是我们可以先创建 ID,然后像这样发送我们的文档:

val matchRef = mFirestore.collection(FirebaseHelp().USERS).document(user.uid).collection(FirebaseHelp().MATCHES).document() //notice this will not create document it will just create reference so we can get our new id from it
val newMatchId = matchRef.id //this is new uniqe id from firebase like "8tmitl09F9rL87ej27Ay" 

文档尚未创建,我们只有一个新 id,所以现在我们将此 id 添加到我们的 POJO 类中(或者我猜它是 POKO,因为它是 Kotlin)。

class MatchInfo(
        var player1Name: String? = null,
        var player2Name: String? = null,
        var player3Name: String? = null,
        var player4Name: String? = null,
        var firebaseId: String? = null, //this is new added string for our New ID
)

现在我们创建要上传到 firebase 的对象:

val matchInfo = MatchInfo(player1?.mName, player2?.mName, player3?.mName, player4?.mName, newMatchId)

或者我们在将对象发送到 firebase 之前设置我们的新 id

matchInfo.firebaseId = newMatchId

现在我们使用我们的新 ID 将我们的对象发送到 firebase,如下所示:

val matches = mFirestore.collection(FirebaseHelp().USERS).document(user.uid).collection(FirebaseHelp().MATCHES)
matches.document(newMatchId).set(matchInfo) // this will create new document with name like"8tmitl09F9rL87ej27Ay" and that document will have field "firebaseID" with value "8tmitl09F9rL87ej27Ay"