Est-il possible d'interroger une collection firestore pour obtenir tous les documents qui commence par une chaîne spécifique?
J'ai parcouru la documentation mais je ne trouve aucune requête appropriée pour cela.
Vous pouvez, mais c'est délicat. Vous devez rechercher des documents supérieurs ou égaux à la chaîne souhaitée et inférieurs à une clé de successeur.
Par exemple, pour rechercher des documents contenant un champ 'foo'
regarder avec 'bar'
vous demanderiez:
db.collection(c)
.where('foo', '>=', 'bar')
.where('foo', '<', 'bas');
Il s'agit en fait d'une technique que nous utilisons dans l'implémentation client pour numériser des collections de documents correspondant à un chemin. Notre calcul de la clé successeur est appelé par un scanner qui recherche toutes les clés commençant par l'ID utilisateur actuel.
même réponse que par Gil Gilbert. Juste une amélioration et un exemple de code. utilisez String.fromCharCode et String.charCodeAt
var strSearch = "start with text here";
var strlength = strSearch.length;
var strFrontCode = strSearch.slice(0, strlength-1);
var strEndCode = strSearch.slice(strlength-1, strSearch.length);
var startcode = strSearch;
var endcode= strFrontCode + String.fromCharCode(strEndCode.charCodeAt(0) + 1);
puis filtrez le code comme ci-dessous.
db.collection(c)
.where('foo', '>=', startcode)
.where('foo', '<', endcode);
Fonctionne sur n'importe quelle langue et tout Unicode.
Attention: tous les critères de recherche dans le magasin Firest SENSIBLE.
const text = 'start with text here';
const end = text.replace(/.$/, c => String.fromCharCode(c.charCodeAt(0) + 1));
query
.where('stringField', '>=', text)
.where('stringField', '<', end);
async function search(startsWith = '') {
let query = firestore.collection(COLLECTION.CLIENTS);
if (startsWith) {
const end = startsWith.replace(
/.$/, c => String.fromCharCode(c.charCodeAt(0) + 1),
);
query = query
.where('firstName', '>=', startsWith)
.where('firstName', '<', end);
}
const result = await query
.orderBy('firstName')
.get();
return result;
}