Je veux mettre à jour un champ d'un objet que l'objet est dans un tableau dans la base de données Firestore avec swift 4. Ces deux fonctions ( arrayUnion () et arrayRemove () ) ne fonctionnent pas pour moi.
voici mon schéma de base de données:
entrez la description de l'image ici
Je souhaite mettre à jour le champ "Statut" dans Le premier élément du tableau.
Aidez-moi.
3 Réponses :
Dans une transaction , récupérez le document, modifiez le champ de l'objet comme vous le voyez tenir en mémoire sur le client, puis mettez à jour tout ce champ dans le document.
Tout d'abord, je tiens à remercier @Doug Stevenson pour sa gentille réponse. dans mon cas, je dois changer le tableau des objets en sous-collections.
Je ne sais pas pourquoi cela a été posté comme réponse car il ne répond pas à la question comment mettre à jour un objet (champ) . Deuxièmement, changer ce tableau en sous-collection n'est probablement pas la meilleure option; vous devez modifier les utilisateurs à stocker en tant que documents dans une collection (/ users) en utilisant l'uid comme documentID (clé) pour chaque nœud d'utilisateurs.
Je pense que la question est:
comment puis-je mettre à jour un champ spécifique stocké dans un document dans un tableau.
Tant que vous connaissez le documentId du document que vous souhaitez mettre à jour - voici la solution.
En supposant une structure similaire à celle de la question
Garfunkle, Sent
et disons que nous voulons changer l'état de Garfunkle en Envoyé
J'inclurai une fonction pour lire le document 1, Garfunkle, puis une deuxième fonction pour mettre à jour l'état à envoyé. p >
Lisez le document à l'index 1 et imprimez ses champs - cette fonction est juste pour tester pour afficher les valeurs du champ avant et après la modification du champ de statut.
func writeFriendStatus() { let data = ["Status": "Sent"] let docRef = self.db.collection("Friends").document("1") docRef.setData(data, merge: true) }
et la sortie
Garfunkle Unsent
puis le code pour mettre à jour le champ Statut sur Envoyé
func readFriendStatus() { let docRef = self.db.collection("Friends").document("1") docRef.getDocument(completion: { document, error in if let document = document, document.exists { let name = document.get("Name") ?? "no name" let status = document.get("Status") ?? "no status" print(name, status) } else { print("no document") } }) }
et la sortie
XXX
Allez-y et ajoutez une partie de votre code afin que nous puissions mieux vous aider.
@JoeyPhillips Le message a été mis à jour.
Il voulait ajouter du code à la question . Veuillez ne pas inclure d'images ou de liens dans vos questions. Incluez le code et les structures sous forme de texte. Pour obtenir votre structure Firebase, utilisez la console Firebase-> Exporter JSON et copiez et collez un extrait de votre structure. Voir les images et les liens sont diaboliques . Pour obtenir le code, veuillez copier et coller le code textuel dans la question et le mettre en forme pour plus de lisibilité en utilisant le {} dans la barre d'outils. Veuillez également clarifier la question car elle n'a pas de sens en l'état.
Bien que @dougstevenson ait une bonne réponse, une autre option serait de simplement mettre à jour le champ spécifique au lieu de lire le document entier, de le modifier et de le réécrire. Vous pouvez donc consulter les deux réponses et voir celle qui correspond le mieux à votre cas d'utilisation.