J'ai donc un db avec 25000 utilisateurs. Et je dois récupérer les données des utilisateurs, qui ont certaines propriétés dans leur compte. Comme ça:

let users = arrayFromObject(await firebase.database().ref('Users')
    .orderByChild('transactions')
    .once('value').then(r => r.val()).catch(e => console.log(e)));
console.log(users);
users = users.filter(u => {
    if (u.transactions) {
        return u;
    }
});
console.log(users);

Et ça marche. Mais il s'avère que seuls 630 utilisateurs ont déclaré la propriété. Comment obtenir uniquement les utilisateurs qui ont la propriété transactions? Je pensais à quelque chose comme orderByChild('transactions').exists() mais cette fonction n'existe pas pour autant que je sache.

Comment puis-je obtenir uniquement les utilisateurs qui ont un champ transactions dans leur compte et les filtrer sur le serveur?

2
Alex Ironside 20 nov. 2018 à 18:07

3 réponses

Meilleure réponse

Ok je l'ai trouvé! C'est ce que j'ai fait:

const users = arrayFromObject(await firebase.database().ref('Users')
    .orderByChild('transactions').startAt(1).once('value').then(r => r.val()));
0
Alex Ironside 22 nov. 2018 à 10:04

Tu peux le faire:

let ref = firebase.database().ref("Users");

ref.orderByChild("transaction").on("value", function(snapshot) {
if(snapshot.exists()){
  console.log("the user has the transaction property");
    }
 });

Ici, l'instantané est au nœud Users puis en utilisant snapshot.exists(), vous pourrez récupérer tous les utilisateurs qui n'ont que la propriété transaction.

Vous pouvez changer la base de données en ceci:

UserTransaction
         john  : true
         peter : true

Ou celui-ci:

UserTransaction
         userId
           transaction : true
         userId
           trasansaction : true

De cette façon, vous récupérez uniquement les utilisateurs qui ont la propriété de transaction

2
Peter Haddad 20 nov. 2018 à 16:21

Je suppose que c'est là que vous devez repenser votre schéma et utiliser la dénormalisation. De cette façon, vous n'aurez probablement pas à faire de requête du tout.

https://www.youtube.com/playlist?list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s

1
Simon Cadieux 20 nov. 2018 à 15:38