webentwicklung-frage-antwort-db.com.de

Cloud Firestore: Aktualisieren Sie Felder in verschachtelten Objekten mit einem dynamischen Schlüssel

im Anschluss an die offizielle Dokumentation von firestore:

{
    name: "Frank",
    favorites: { food: "Pizza", color: "Blue", subject: "recess" },
    age: 12
}

// To update favorite color:
db.collection("users").doc("frank").update({
    "favorites.color": "Red"
})

Ich möchte anstelle von Farbe einen dynamischen Schlüssel verwenden.

db.collection("users").doc("frank").update({
    "favorites[" + KEY + "].color": true
});

dies ist natürlich nicht möglich und wirft einen Fehler aus.

Ich habe versucht, dies zu tun:

db.collection("users").doc("frank").update({
    favorites: {
        [key]: {
            color": true
        }
    }
});

Es wird tatsächlich mit dem richtigen Schlüssel aktualisiert, aber leider werden die anderen Schlüssel überschrieben (sie werden gelöscht).

25
Brieuc

Ich fand die Lösung von einer Firebase-Lösung inspiriert (ersetzt "/" durch "."). 

var usersUpdate = {};
usersUpdate[`favorites.${key}.color`] = true;

db.collection("users").doc("frank").update(usersUpdate);
41
Brieuc

Diese Lösung hat für mich funktioniert:

db.collection('users').doc('frank').update({
  ['favorites.' + key + '.color']: true
});
8

Sie können bestimmte Felder mit variablen (ly) benannten verschachtelten Objekten wie unten beschrieben aktualisieren.

ref.set({
    name: "Frank",
    favorites: { food: "Pizza", quantity: 2 }
});

//now the relevant update code
var name = "favorites";
var qty = 111;
var update = {};
update[name+".quantity"] = qty;
ref.update(update);

https://jsbin.com/hihifedizu/edit?js,console

0
Ron Royston