webentwicklung-frage-antwort-db.com.de

Wie fügt man Firebase Firestore Werte hinzu, ohne zu überschreiben?

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.

6
Thrinadh Reddy

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 .

3
Dumbo

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.

5
Alex Mamo

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. 

1
fra pet

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 

0
thaffe