Ich habe zwei Aktivitäten, ich füge Daten zu Firestore aus diesen beiden Aktivitäten einzeln hinzu. Immer wenn ich Firestore zweite Aktivitätsdaten hinzufüge, werden die ersten Aktivitätsdaten überschrieben. Ich habe den folgenden Code in den beiden Aktivitäten verwendet:
firebaseFirestore.collection("Users").document(user_id).set(data)
So beenden Sie das Überschreiben Ich möchte beide Aktivitätsdaten in demselben user_id
speichern.
Ich empfehle Ihnen, ein weiteres Dokument oder eine Sammlung hinzuzufügen, in der mehr als ein Datenwert für einen einzelnen Benutzer gespeichert werden kann.
Sie können Dokumentverweise für beide Aktivitäten erstellen:
firebaseFirestore.collection("Users").document(user_id+"/acitivity1").set(data);
//and
firebaseFirestore.collection("Users").document(user_id+"/acitivity2").set(data);
Oder Sie können eine Untersammlung dafür erstellen:
firebaseFirestore.collection("Users").document(user_id)
.collection("Activities").document("acitivity1").set(data);
//and
firebaseFirestore.collection("Users").document(user_id)
.collection("Activities").document("acitivity2").set(data);
Mehr zu hierarchischen Daten dort .
Es gibt zwei Möglichkeiten, dies zu erreichen. Zuerst würde man eine Map
verwenden:
Map<String, Object> map = new HashMap<>();
map.put("yourProperty", "yourValue");
firebaseFirestore.collection("Users").document(user_id).update(map);
Wie Sie sehen, habe ich die update()
-Methode anstelle der set()
-Methode verwendet.
Der zweite Ansatz wäre, ein Objekt Ihrer Modellklasse wie folgt zu verwenden:
YourModelClass yourModelClass = new YourModelClass();
yourModelClass.setProperty("yourValue");
firebaseFirestore.collection("Users").document(user_id)
.set(yourModelClass, SetOptions.mergeFields("yourProperty"));
Wie Sie sehen, habe ich die set()
-Methode verwendet, aber als zweites Argument SetOptions.mergeFields("yourProperty")
übergeben, was bedeutet, dass wir nur für ein bestimmtes Feld ein Update durchführen.
Gemäß der Dokumentation könnten Sie als zweiten Parameter {merge:true}
verwenden. In meiner Erfahrung liegt das Problem in der Regel darin, dass Sie versuchen, andere Daten zu speichern, jedoch denselben Schlüssel verwenden.
Selbst wenn Sie {merge: true}
verwenden, wird der aktuelle Schlüssel immer mit dem Wert aktualisiert, den Sie übergeben.
Merge: true Funktioniert nur, wenn der Schlüssel noch nicht vorhanden ist. Ich glaube, dass jeder Schlüssel in einem Dokument eindeutig sein muss.
Um es zu testen, versuchen Sie, Daten mit einem anderen Schlüssel zu übergeben ({merge: true}
als zweiten Parameter zu behalten), und es wird mit dem vorhandenen zusammengeführt.
Wenn Sie wissen, dass das Benutzerdokument bereits in Firestore vorhanden ist, sollten Sie es verwenden
firebaseFirestore.collection("Users").document(user_id).update(data)
Wenn Sie nicht wissen, ob das Dokument existiert, können Sie es verwenden
firebaseFirestore.collection("Users").document(user_id).set(data, {merge:true})
Dadurch werden die Daten tief zusammengeführt
Alternativ können Sie dies auch mithilfe von Untersammlungen tun