Considérez le format JSON suivant dans la base de données Firebase -

"root":
{
    "question":
    {
        "1":
        {
            "category":"A",
            "replies":0
        },
        "2":
        {
            "category":"B",
            "replies":1
        },
        "3":
        {
            "category":"B",
            "replies":0
        },
        "4":
        {
            "category":"C",
            "replies":2
        }
    }
}

Pour obtenir toutes les questions avec des réponses = 0, je le fais,

Query query = rootReference.child("question").orderByChild("replies").equalTo(0);

Qui fonctionne parfaitement.

Mais que dois-je faire si je veux ces questions avec des réponses différentes de 0?

2
Chirag Mittal 24 nov. 2017 à 20:23

3 réponses

Meilleure réponse

En lisant la documentation, je ne vois aucune méthode notEqualTo() ni aucun autre moyen de "nier" une requête. Cependant, puisque vous appelez déjà .orderByChild("replies"), vous pouvez peut-être utiliser ceci:

Query query = rootReference.child("question").orderByChild("replies").startAt(1);
3
Ben P. 24 nov. 2017 à 17:45

En fait, Firebase ne fournit aucune méthode pour exclure certains résultats comme vous le souhaitez ici.

Cependant, vous pouvez modifier votre JSON comme ceci, puis utiliser la requête suivante:

// add a different key for all replies = 0, & another different key for non-zero replies
"root":
{
    "question":
    {
        "1":
        {
            "category":"A",
            "replies":0,
            "key2":"someOtherKey"
        },
        "2":
        {
            "category":"B",
            "replies":1,
            "key1":true
        },
        "3":
        {
            "category":"B",
            "replies":0,
            "key2":"someOtherKey"
        },
        "4":
        {
            "category":"C",
            "replies":2,
            "key1":true
        }
    }
}

// now you can use this query to get all non-zero-replies results
// it will give you child 2, 4
Query query = rootReference.child("question").orderByChild("key1").equalTo(true);

// to get all zero-replies childs, use this
Query query = rootReference.child("question").orderByChild("key1").equalTo(null);
0
Prashant Saini 24 nov. 2017 à 17:56

Firebase ne prend actuellement en charge que les opérations positives, pas la négation. vous souhaiterez peut-être récupérer toutes les données, puis les filtrer localement.

Voici la réponse

0
vikas kumar 24 nov. 2017 à 17:45
47477778