数据仅存储在list/0中。 我希望将多个数据存储在用户的电子邮件中。
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
FirebaseFirestore db = FirebaseFirestore.getInstance();
final ArrayList<AddDayInfo> list = new ArrayList<>();
final Map<String,Object> docData = new HashMap<>();
AddDayInfo memberInfo = new AddDayInfo(Type,Day,Name,Time1,Time2,Time3);
list.add(memberInfo);
for(int i=0;i<list.size();i++) {
if (user != null) {
docData.put("Day_M", list);
db.collection("day").document(user.getEmail()).set(docData, SetOptions.merge())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
startToast("Okay. Add Data..");
myStartActivity(Add_Main_Activity.class);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
startToast("Failed...");
}
});
}
}
我想添加如下图所示的数据:
最佳答案
要将项目添加到 Firestore 中的数组中,您有两种选择:
- 使用
FieldValue.arrayUnion
确保数组中只有唯一的元素。 - 读取整个数组,在应用程序代码中更改它,然后写回。
这两者之间的选择取决于您的数据的含义,我希望您实际上需要这里的第二个(更复杂)选项。
<小时/>我们将从 FieldValue.arrayUnion
开始,只是为了向您展示如何操作:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("day").document(user.getEmail())
AddDayInfo memberInfo = new AddDayInfo(Type,Day,Name,Time1,Time2,Time3);
docRef.update("messages", FieldValue.arrayUnion(memberInfo))...
<小时/>
如果您总是想将消息添加到数组的末尾,即使该消息的另一个副本已经存在,您也需要:
- 读取数组的当前内容
- 更改应用代码中的数组
- 将完整数组写回数据库
由于我们使用当前值来确定新值,因此最好为此使用事务:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("day").document(user.getEmail())
AddDayInfo memberInfo = new AddDayInfo(Type,Day,Name,Time1,Time2,Time3);
db.runTransaction(new Transaction.Function<Void>() {
@Override
public Void apply(Transaction transaction) throws FirebaseFirestoreException {
DocumentSnapshot snapshot = transaction.get(docRef);
List messages = snapshot.get("messages");
messages.add(memberInfo)
transaction.update(docRef, "messages", messages);
// Success
return null;
}
})
关于java - 如何将多个数据添加到 Android Firestore 中的一个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62360307/