Android 为文档提供UID';姓名
我想知道在firestore数据库中保存用户首选项的最佳做法是什么。 我会尝试用一个例子来解释 案例1 我的“用户”集合中有此类文档(名称由Firebase随机生成),包含3个字段:Android 为文档提供UID';姓名,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我想知道在firestore数据库中保存用户首选项的最佳做法是什么。 我会尝试用一个例子来解释 案例1 我的“用户”集合中有此类文档(名称由Firebase随机生成),包含3个字段: 用户\u uid:字符串 昵称:字符串 android_lover:布尔值 在我的Android项目中,当我想搜索用户“DFDDE45554SDC”的文档时,我会搜索where user_uid=“DFDDE45554SDC” 案例2 我的“用户”集合中有此类文档(名称是使用用户的UID创建的),包含两个字段:
- 用户\u uid:字符串
- 昵称:字符串
- android_lover:布尔值
- 昵称:字符串
- android_lover:布尔值
我指定:我不想要重复的用户。
那么,最佳实践是什么(安全、优化等)?为什么?我认为案例2更有效,原因如下:
- 我们已经知道用户的ID,所以不需要在这里使用其他ID
- 使用
构造简单,是直接的userscolection.document(userId)
,而不是DocumentReference
,因此:查询
可以存储在Firestore数据库中,而DocumentReference
查询不能
可能比指示Firestore数据库使用DocumentReference
执行过滤查询更具扩展性(尽管使用索引,此时性能差异可能可以忽略不计)whereEqualTo(“user\u uid”,userId)
将始终返回结果集合(即使只有1个),而不是确切的文档查询
- 目前不需要为用户集合中的每个文档随机生成不同的ID,因为用户ID已经是唯一的
- 每个用户只需要一个文档,因此这是一种确保不会有任何副本的可靠方法
案例1
的唯一真正动机是将您的文档命名方案与数据库中的其他集合标准化,但这对Firestore来说并不重要
关于Android中的两个示例:
案例1
db.collection("users")
.whereEqualTo("user_uid", "DFDDE45554SDC")
.limit(1)
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
// Even with limit(1), we still receive a collection
// so iterate this to obtain the desired document
}
}
}
});
db.collection(“用户”)
.whereEqualTo(“用户uid”、“DFDDE45554SDC”)
.限额(1)
.get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(DocumentSnapshot文档:task.getResult()){
//即使有限制(1),我们仍然会收到一笔收款
//因此,重复此操作以获得所需的文档
}
}
}
});
案例2
db.collection("users")
.document("DFDDE45554SDC")
.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful() && task.getResult() != null) {
// We have access to the single desired document directly
DocumentSnapshot document = task.getResult();
}
}
});
db.collection(“用户”)
.文件(“DFDDE45554SDC”)
.get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()&&task.getResult()!=null){
//我们可以直接访问所需的单个文档
DocumentSnapshot document=task.getResult();
}
}
});
我想这要看情况而定。假设有两个登录选项提供给用户facebook,phone Auth。因此,在这种情况下,firestore中一个用户的一个唯一用户文档将有两个uid。因此,在这种情况下,应首选情况1。