Android 在Firebase Cloud Firestore中在文档中添加更多字段而不覆盖
我希望在firebase中添加字段而不覆盖它 正如您在下面看到的,我的应用程序的用户将筛选他们的情绪,并将情绪上传到firebase。 实际上,用户会被多次筛选,每次他们都会得到不同的情绪或相同的情绪 假设用户屏蔽了他们的脸,分别得到了快乐、悲伤和快乐 我希望firebase控制台中的字段如下所示: 情感:幸福Android 在Firebase Cloud Firestore中在文档中添加更多字段而不覆盖,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我希望在firebase中添加字段而不覆盖它 正如您在下面看到的,我的应用程序的用户将筛选他们的情绪,并将情绪上传到firebase。 实际上,用户会被多次筛选,每次他们都会得到不同的情绪或相同的情绪 假设用户屏蔽了他们的脸,分别得到了快乐、悲伤和快乐 我希望firebase控制台中的字段如下所示: 情感:幸福 String Emotion = EmotionType.toString(); userID = fAuth.getCurrentUser().getUid(); FaceEmot
String Emotion = EmotionType.toString();
userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";
Map<String,Object> user = new HashMap<>();
user.put("FaceEmotion",Emotion);
DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);
documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: Data has been saved "+ userID);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: " + e.toString());
}
});
表情:悲伤
情感:幸福
String Emotion = EmotionType.toString();
userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";
Map<String,Object> user = new HashMap<>();
user.put("FaceEmotion",Emotion);
DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);
documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: Data has been saved "+ userID);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: " + e.toString());
}
});
使用下面的代码,此时我只能用相同的情感值覆盖(FaceEmotion:),但不能像上面那样添加值。我尝试过使用数组,但我想问题在于字段名“FaceMootion”是相同的。
我有没有办法让Firestore为字段名“FaceMootion”生成autoID?比如说也许有这样的东西:
表情1:幸福
String Emotion = EmotionType.toString();
userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";
Map<String,Object> user = new HashMap<>();
user.put("FaceEmotion",Emotion);
DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);
documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: Data has been saved "+ userID);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: " + e.toString());
}
});
表情2:悲伤
表情3:幸福
String Emotion = EmotionType.toString();
userID = fAuth.getCurrentUser().getUid();
FaceEmotion = "FaceEmotion";
Map<String,Object> user = new HashMap<>();
user.put("FaceEmotion",Emotion);
DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document(FaceEmotion);
documentReference.update("FaceEmotion",FieldValue.arrayUnion(user)).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: Data has been saved "+ userID);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: " + e.toString());
}
});
String Emotion=EmotionType.toString();
userID=fAuth.getCurrentUser().getUid();
FaceEmotion=“FaceEmotion”;
Map user=newhashmap();
用户输入(“脸情感”,情感);
DocumentReference DocumentReference=fStore.collection(“用户”).document(userID).collection(“FaceEmotion”).document(FaceEmotion);
documentReference.update(“FaceMootion”,FieldValue.arrayUnion(用户)).addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
Log.d(标记“onSuccess:数据已保存”+用户ID);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(标记“onFailure:+e.toString());
}
});
问题在于如何写入文档,解决方案是为每个新的表情创建一个新的文档,这样您就可以将情感添加到该集合中
使用此修改编写情感的代码如下所示:
String emotion = EmotionType.toString();
userID = fAuth.getCurrentUser().getUid();
faceEmotion = "FaceEmotion";
Map<String,Object> val = new HashMap<>();
val.put("FaceEmotion",emotion);
DocumentReference documentReference = fStore.collection("users").document(userID).collection("FaceEmotion").document();
documentReference.set(val).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: Data has been saved "+ userID);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: " + e.toString());
}
});
String emotion=EmotionType.toString();
userID=fAuth.getCurrentUser().getUid();
faceEmotion=“faceEmotion”;
Map val=新的HashMap();
val.put(“脸情感”,情感);
DocumentReference DocumentReference=fStore.collection(“users”).document(userID).collection(“FaceEmotion”).document();
documentReference.set(val).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
Log.d(标记“onSuccess:数据已保存”+用户ID);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(标记“onFailure:+e.toString());
}
});
请编辑问题,以更详细地描述您希望此代码的结果。您到底希望文档看起来像什么?“增加价值”是什么意思?现在更清楚了吗?但实际上,如果你读了我的帖子,你就会明白我希望结果看起来像@DougStevenson。一个文档不能有多个同名字段。请考虑使用数组类型字段来保存多个值,或者使用每个用户的多个文档。请让我了解如何做到这一点。如果你想帮我调整上面的代码,那会更有帮助。无论如何,谢谢你通知我不能有多个同名字段@请检查我上面编辑的帖子。我设法使用了数组,但当用户在多次尝试中始终获得相同的情绪时,数组不会更新。我想这是因为相同的域名。我能知道如何获得自动生成的字段名吗@史蒂文森