Firestore aktualisiert nur ein Feld

Lesezeit: 3 Minuten

Benutzer-Avatar
Delphian

Ich habe eine Datenbank. Die Reihenfolge ist: Sammlungen – Dokument – Hashmaps. Zum Beispiel:

Benutzer – der Name der Sammlung

users.uid – der Name des Dokuments

Hashmap das Dokument besteht aus vielen Hashmaps Benutzerdaten Hashmap Hashmap etc

Hashmap: Der Name des Benutzers ist der Schlüssel und Telefon, Standort usw. sind die Werte. Ich muss nur ein Feld (Standort) für einen Benutzernamen aktualisieren, verstehe aber nicht, wie das geht?

Ich habe den nächsten Weg versucht (Telefonnummer für Alex aktualisieren):

User user = new User();
user.setPhone(131902331);

Map<String,RealmObject> userMap = new HashMap<>();
userMap.put("alex",user);

          mFirebaseFirestore
                  .collection("users")
                  .document(mFirebaseAuth.getUid())
                  .set(userMap, SetOptions.merge())
                  .addOnSuccessListener(new OnSuccessListener<Void>() {
                      @Override
                      public void onSuccess(Void aVoid) {
                          LOG.info("Success");
                      }
                  })
                  .addOnFailureListener(new OnFailureListener() {
                      @Override
                      public void onFailure(@NonNull Exception e) {
                          LOG.error("Failure "+e.toString());
                      }
                  });

Was mache ich falsch?

  • Würde es Ihnen etwas ausmachen, die Struktur der Benutzerdokumente zu zeigen, dh welche Felder und welche Schlüssel sie haben?

    – Nikolaus Pesa

    12. Dezember 2017 um 23:39 Uhr

  • Vielleicht irre ich mich, aber sollte es nicht so sein: db.collection(“users”).document(“frank”).update({ “age”: 13, “favorites.color”: “Red” });

    – mono68

    8. Juli 2019 um 15:33 Uhr


  • verzeihen Sie diese dumme Frage – aber gibt es eine Möglichkeit, diese Kartensyntax jetzt in Java zu verwenden? Oder ist das nur eine Abkürzung für die Antwort.

    – Andreas

    3. Oktober 2020 um 23:42 Uhr

  • Sie müssen eine Karte mit Daten erstellen, die in Ihrem Dokument aktualisiert werden sollen

    – Apoorv Pandey

    7. April 2021 um 9:06 Uhr

  • verzeihen Sie diese späte Antwort @Andrew – es ist eine spezielle Syntax, die Firebase verarbeitet. Beachten Sie, dass, wenn die Favoritenkarte noch nicht existiert, dies ein Feld mit dem wörtlichen Schlüssel “favorites.color” ergeben würde, andernfalls wird es wie erwartet und gewünscht in die vorhandene Karte eingefügt.

    – Streuner

    15. April um 2:58 Uhr

  • Es funktioniert nicht. Weil ich Realm-Objekt anstelle von Objekt in HashMap sende. Wenn ich versuche, es zu setzen, sehe ich den Fehler.

    – Delphian

    12. Dezember 2017 um 15:28 Uhr


  • Welchen Fehler erhalten Sie? Stellen Sie außerdem sicher, dass Ihre Frage das tatsächliche Problem enthält, das Sie haben, da derzeit a verwendet wird HashMap während Sie gerade ein Reichsobjekt erwähnen.

    – Frank van Puffelen

    12. Dezember 2017 um 16:14 Uhr

  • Mein HashMap-Look mag HashMap, deshalb sah ich beim Versuch, sie in die Update-Methode zu stecken, den Fehler über den falschen Typ, aber wenn ich die Set-Methode verwende, ist alles in Ordnung

    – Delphian

    13. Dezember 2017 um 7:07 Uhr

  • Ich bin mir nicht sicher, wie ein RealmObject aussieht, aber diese Fragen könnten relevant sein: stackoverflow.com/search?q=%5Bfirebase%5D+RealmObject

    – Frank van Puffelen

    13. Dezember 2017 um 15:13 Uhr

  • Es betrifft nur Firestore. Ich habe das gleiche mit Firebase ohne Probleme gemacht. Aber Firestore benötigt eine andere Datenstruktur, deshalb habe ich ein Problem mit der Update-Methode. Im Moment habe ich eine neue Struktur erstellt (diese Struktur ist etwas redundant) und das Update funktioniert perfekt. Ich konnte in meinem Hauptbeitrag nicht finden, wie man update für die Struktur verwendet.

    – Delphian

    13. Dezember 2017 um 15:29 Uhr

1258210cookie-checkFirestore aktualisiert nur ein Feld

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy