web-dev-qa-db-fra.com

Définition de matrices dans Firebase à l'aide de la console Firebase

J'utilise la console Firebase pour préparer les données d'une application de démonstration. Les participants sont l’un des éléments de données. Les participants sont un tableau. Je souhaite ajouter quelques participants sous forme de tableau dans Firebase. Je comprends que Firebase n’a pas de tableaux, mais d’objets avec des clés (dans l’ordre chronologique). Comment puis-je faire cela pour préparer des échantillons de données? Mes données Firebase actuelles ressemblent à celles ci-dessous .  enter image description here

16
vijayst

La base de données Firebase ne stocke pas de tableaux. Il stocke des dictionnaires/des tableaux associés. Donc, le plus proche que vous pouvez obtenir est:

attendees: {
  0: "Bill Gates",
  1: "Larry Page",
  2: "James Tamplin"
}

Vous pouvez créer cette structure dans la console Firebase. Et ensuite, lorsque vous le lirez avec l’un des SDK de Firebase, il sera traduit en tableau.

firebase.database().ref('attendees').once('value', function(snapshot) {
  console.log(snapshot.val());
  // ["Bill Gates", "Larry Page", "James Tamplin"]
});

Donc, cela peut être le résultat que vous recherchez. Mais je vous recommande de lire ce billet sur pourquoi Firebase le préfère si vous ne stockez pas de tableaux: https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html .

Ne pas utiliser un tableau, quand vous avez réellement besoin d'un ensemble

La plupart des développeurs n'essayent pas réellement de stocker un tableau et je pense que votre cas pourrait en être un. Par exemple: "Bill Gates" peut-il être un participant à deux reprises? 

attendees: {
  0: "Bill Gates",
  1: "Larry Page",
  2: "James Tamplin",
  3: "Bill Gates"
}

Sinon, vous devrez vérifier s'il est déjà dans le tableau avant de l'ajouter.

if (!attendees.contains("Bill Gates")) {
  attendees.Push("Bill Gates");
}

Cela indique clairement que votre structure de données est sous-optimale pour le cas d'utilisation. Avoir à vérifier tous les enfants existants avant d'en ajouter un va limiter l'évolutivité.

Dans ce cas, vous voulez vraiment un ensemble: une structure de données dans laquelle chaque enfant ne peut être présent qu'une seule fois. Dans Firebase, vous modélisez des ensembles comme ceci:

attendees: {
  "Bill Gates": true,
  "Larry Page": true,
  "James Tamplin": true
}

Et maintenant, chaque fois que vous essayez d'ajouter Bill Gates une seconde fois, c'est un no-op:

attendees["Bill Gates"] = true;

Ainsi, au lieu d'avoir à coder pour l'exigence d'unicité, la structure de données le résout implicitement.

47
Frank van Puffelen

Après avoir écrit mon autre réponse, je me suis rendu compte que vous cherchiez peut-être simplement comment ajouter des identifiants Push dans la console. 

Ce n'est pas une caractéristique pour le moment. La plupart d'entre eux consistent à utiliser différents types de clés lors de la saisie des données de test ou à insérer un petit extrait de code JavaScript dans un autre onglet pour générer les clés et les copier/coller. 

Veuillez demander la fonctionnalité ici , puisque vous n'êtes certainement pas le premier à demander.

4
Frank van Puffelen

firebase array? Oui, j'ai le même problème avec vous il y a quelques semaines, mais je l'ai trouvé dans ici . Enfin, je peux l’utiliser avec mon ChartJS.

function jamToArray(snapshot) {
    const returnArr = [];
    snapshot.forEach(function(childSnapshot) {
        const item = childSnapshot.val().time;
        returnArr.Push(item);
    });
    return returnArr;
};

firebase.database().ref('sensor').limitToLast(10).on('value', function(snapshot) {
    const jam       = jamToArray(snapshot);
});

0
Indo Entertain