我可以在 Firestore 中设置自定义 ID 吗?

Posted

技术标签:

【中文标题】我可以在 Firestore 中设置自定义 ID 吗?【英文标题】:Could I set custom ID in firestore? 【发布时间】:2021-12-18 00:48:44 【问题描述】:

之前我使用实时数据库,但现在我需要更改为使用firestore。

当我在实时数据库中写入数据时,我使用这种方法。

FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
String userid = firebaseUser.getUid();
reference = FirebaseDatabase.getInstance().getReference().child("Users").child(userid);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("id", userid);
hashMap.put("email", email);
hashMap.put("username", username);

所以数据会这样显示

  "Users" : 
    "02nfE2JziDgzxZwYpmCwQ20QwQ93" : 
      "email" : "sowtp12pushcivet@gmail.com",
      "id" : "02nfE2JziDgzxZwYpmCwQ20QwQ93",
      "username" : "AAA"
    ,

但是当我使用firestore时,它会显示这个

  "Users" : 
    "u93AclSJJiLQBdfcK2st" : 
      "email" : "sowtp12pushcivet@gmail.com",
      "id" : "02nfE2JziDgzxZwYpmCwQ20QwQ93",
      "username" : "AAA"
    ,

我可以将u93AclSJJiLQBdfcK2st 更改为02nfE2JziDgzxZwYpmCwQ20QwQ93,如果可以更改,我该怎么做?

这是我的代码。

db = FirebaseFirestore.getInstance();
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("id", userid);
hashMap.put("email", email);
hashMap.put("username", username);

db.collection("Users").add(hashMap).addOnSuccessListener(new OnSuccessListener<DocumentReference>() 
@Override
public void onSuccess(DocumentReference documentReference) 
Toast.makeText(RegisterActivity.this, "OK", Toast.LENGTH_SHORT).show();
   
);

【问题讨论】:

【参考方案1】:

当您调用add()时,Firestore 会生成一个新的文档 ID。这相当于为实时数据库 API 调用 push()

如果您想指定自己的文档 ID,请不要调用 add,而是通过使用 document("yourNewId").set()

db.collection("Users").document(userid).set(hashMap)...

另请参阅 setting a document value 上的 Firebase 文档。

【讨论】:

以上是关于我可以在 Firestore 中设置自定义 ID 吗?的主要内容,如果未能解决你的问题,请参考以下文章

在自定义单元格中设置自定义附件类型

我可以在 iPhone 的 CLLocationManager 中设置自定义位置吗

如何在 alamofire 5.0.2 版本中设置自定义超时

如何在 UIIMagePickerController 中设置自定义图像

如何在 django 模板中设置自定义 forloop 起点

如何在 fhirclient-4.0.0 python 库中设置自定义标头?