Requête basée sur plusieurs clauses where de Firebase
{
"movies": {
"movie1": {
"genre": "comedy",
"name": "As good as it gets",
"lead": "Jack Nicholson"
},
"movie2": {
"genre": "Horror",
"name": "The Shining",
"lead": "Jack Nicholson"
},
"movie3": {
"genre": "comedy",
"name": "The Mask",
"lead": "Jim Carrey"
}
}
}
Je suis un Firebase débutant. Comment puis-je récupérer un résultat à partir des données ci-dessus où genre = 'comedy'
ET lead = 'Jack Nicholson'
?
Quelles options dois-je?
pour une alternative stackoverflow.com/questions/42249524/...
Possible en double stackoverflow.com/questions/40419871/...
Possible en double stackoverflow.com/questions/40419871/...
OriginalL'auteur 47d_ | 2014-11-02
Vous devez vous connecter pour publier un commentaire.
À l'aide de Firebase Requête de l'API, vous pourriez être tenté d'essayer ceci:
Mais comme @RobDiMarco de Firebase dit dans les commentaires:
Donc mon code ci-dessus ne fonctionnera pas.
Je sais de trois approches de travail.
1. filtre de plus sur le serveur, faire le reste sur le client
Ce que vous peut faire est d'exécuter un
orderBy().startAt()./endAt()
sur le serveur, tirer vers le bas le reste des données et le filtre que dans le code JavaScript sur votre client.2. ajouter une propriété qui combine les valeurs que vous souhaitez filtrer sur
Si ce n'est pas assez bon, vous devriez envisager de modifier/expansion de vos données pour permettre à votre cas d'utilisation. Par exemple: vous pourriez trucs genre+de plomb dans une seule propriété que vous venez d'utiliser pour ce filtre.
Vous êtes essentiellement de la construction de votre propre index multi-colonne de cette façon et peut interroger:
David-Orient a écrit un bibliothèque appelée QueryBase qui aide à la production de ces biens.
Vous pouvez même faire par rapport/gamme requêtes, disons que vous voulez afin de permettre l'interrogation de films par catégorie et par année. Vous pouvez utiliser cette structure de données:
Puis de requête pour les comédies des années 90 avec:
Si vous avez besoin de filtrer sur plus que juste l'année, assurez-vous d'ajouter la date d'autres pièces dans l'ordre décroissant, par exemple
"comedy_1997-12-25"
. De cette façon, le vocabulaire de la commande que Firebase n'sur les valeurs de chaîne sera le même que l'ordre chronologique.Cette combinaison de valeurs d'une propriété peut travailler avec plus de deux valeurs, mais vous ne pouvez faire un filtre de gamme sur la dernière valeur dans le composite de la propriété.
Un de très spécial variante de ce qui est mis en œuvre par le GeoFire bibliothèque de Firebase. Cette bibliothèque combine la latitude et la longitude d'un lieu dans un soi-disant Geohash, qui peut ensuite être utilisé pour faire des en temps réel les requêtes d'intervalle sur Firebase.
3. créer un index personnalisé par programme
Encore une autre alternative est de faire ce que nous avons fait avant cette nouvelle Requête API a été ajouté: créer un index dans un nœud différent:
Il y a probablement plus d'approches. Par exemple, cette réponse met en évidence une alternative en forme d'arbre d'index personnalisé: https://stackoverflow.com/a/34105063
orderBy()
appels lèvera une erreur, parce que les clients donnent des résultats inattendus. Il est possible qu'elle coïncidence travaillé dans votre test, mais n'est pas conçu pour fonctionner de cette façon générique (bien que nous aimerions ajouter!).Est-ce encore pertinent en 2016 avec Firebase V3? Il n'existe pas de meilleures façons de faire cela?
Pourquoi nous ne pouvons pas utiliser
.equalTo('comedy')
au lieu de.startAt('comedy').endAt('comedy')
?C'est en 2018, il n'y a pas de solution simple pour cela? C'est comme requête 101 en base de données relationnelle. Et vu tous les commentaires sur David de la vidéo parle de SQL #8, je l'ai attendu Google pour le fixer. Ai-je raté une mise à jour?
non vous n'avez pas. Je ne sais pas pourquoi, mais Google est assez lent dans la prise de Firebase base de données mieux. Je sais Firestore mais il n'est tout simplement pas bon. N'a pas la bonne interrogation.
OriginalL'auteur Frank van Puffelen
J'ai écrit une bibliothèque personnelle, qui vous permet de commander par multiples de valeurs, avec la commande effectuée sur le serveur.
Rencontrer Querybase!
Querybase prend dans un Firebase Base de données de Référence et d'un tableau de champs que vous souhaitez indexer. Lorsque vous créez de nouveaux dossiers, il va automatiquement gérer la génération des clés qui permettent d'interrogations multiples. Le problème, c'est qu'il ne supporte directement l'équivalence (pas inférieur ou supérieur).
Il est écrit en TS! Donc, il suffit d'importer 🙂
savez-vous pourquoi ils ont fait la base de données de manière restrictive ?
De toute option de faire un IOS Swift/version d'Android
David, tout android/Java équivalence?
OriginalL'auteur David East
Il l'a converti en objet Film et en supposant qu'il existe un getLead() metho.
Thankz beaucoup. Il travaille comme plus où l'une des clauses
OriginalL'auteur Andrew Lam
Cela fonctionne.
OriginalL'auteur jaleel