Je cherche à ajouter un champ de recherche simple, j'aimerais utiliser quelque chose comme
collectionRef.where('name', 'contains', 'searchTerm')
J'ai essayé d'utiliser where('name', '==', '%searchTerm%')
, mais cela n'a rien retourné.
Je cherche à ajouter un champ de recherche simple, j'aimerais utiliser quelque chose comme
collectionRef.where('name', 'contains', 'searchTerm')
J'ai essayé d'utiliser where('name', '==', '%searchTerm%')
, mais cela n'a rien retourné.
Il n'y a pas d'opérateur, celles qui sont autorisées sont ==
, <
, <=
, >
, >=
.
Vous pouvez filtrer par préfixes, par exemple pour tout ce qui commence entre bar
et foo
vous pouvez utiliser
collectionRef.where('name', '>=', 'bar').where('name', '<=', 'foo')
Vous pouvez utiliser des services externes comme Algolia ou ElasticSearch pour que.
Alors que Kuba réponse est vrai aussi loin que les restrictions de déplacement, vous pouvez partiellement imiter ce avec une mise en forme de la structure:
{
'terms': {
'reebok': true,
'mens': true,
'tennis': true,
'racket': true
}
}
Maintenant, vous pouvez faire une requête avec
collectionRef.where('terms.tennis', '==', true)
Cela fonctionne parce que Firestore crée automatiquement un index pour chaque champ. Malheureusement cela ne fonctionne pas directement pour la composition de requêtes car Firestore ne pas créer automatiquement des index composites.
Vous pouvez toujours contourner cela, en stockant des combinaisons de mots, mais cela devient laid rapide.
Vous êtes probablement mieux avec un moteur hors-bord , recherche en texte intégral.
Firebase n'est pas explicitement la recherche d'un terme au sein d'une chaîne...
Firebase n'est cependant désormais en charge les éléments suivants qui permettra de résoudre votre cas et beaucoup d'autres:
En août 2018 ils soutiennent array-contains
de la requête. Voir: https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html
Vous pouvez maintenant définir l'ensemble de vos termes clés dans un tableau comme un champ de requête pour tous les documents qui ont un tableau qui contient des "X". Vous pouvez utiliser la logique ET à faire d'autres comparaisons pour les requêtes supplémentaires. (C'est parce que firebase ne prend pas actuellement en charge en mode natif composé des requêtes pour de multiples tableau contient les requêtes so " ET " tri des requêtes devra être fait sur le client final)
À l'aide de tableaux dans ce style va leur permettre d'être optimisé pour les écritures simultanées ce qui est agréable! N'ai pas testé qu'il prend en charge des demandes de lots (docs ne pas dire), mais je pari qu'il ne depuis son une solution officielle.
collection("collectionPath").
where("searchTermsArray", "array-contains", "term").get()
Par la Firestore docs, Cloud Firestore ne prend pas en charge native de l'indexation ou de recherche pour les champs de texte dans les documents. En outre, le téléchargement d'une collection entière à la recherche pour les champs côté client n'est pas pratique.
La troisième partie de la recherche de solutions comme Algolia et Élastique de Recherche sont recommandés.
Réponse tardive, mais pour ceux qui cherchent encore une réponse, supposons que nous avons une collection d'utilisateurs et que dans chaque document de la collection, nous avons un champ "nom d'utilisateur", donc si vous voulez trouver un document dont le nom d'utilisateur commence par "al" nous pouvons faire quelque chose comme
FirebaseFirestore.getInstance().collection("users").whereGreaterThanOrEqualTo("username", "al")
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.