2017-10-15 3 views
1

Cela fonctionneComment je corriger une erreur FireStore se plaindre de l'ordre par le filtre d'égalité

collection 
    .where('startDate', '>=', startDate) 
    .get(); 

Cela entraînera une erreur

collection 
    .where('startDate', '>=', startDate) 
    .where('startDate', '<=', endDate) 
    .get(); 

L'erreur Error: order by clause cannot contain a field with an equality filter startDate

Je ne comprendre l'erreur ou comment la réparer. Mon type de données dans firestore est une date. La documentation permet des requêtes de gamme tant que c'est le même champ, donc je ne sais pas pourquoi cela ne fonctionne pas.

Répondre

0

Il s'avère que les variables startDate/endDate étaient des entiers et une fois que je les ai changés en objet date, la requête commence à fonctionner.

3

Si startDate et endDate sont les mêmes, vous obtiendrez également cette erreur, par exemple:

let startDate = new Date('1980-12-01') 
    let endDate = new Date('1980-12-01') 

Solution est:

let startDate = new Date('1980-12-01 00:00:00') 
    let endDate = new Date('1980-12-01 23:59:59') 
1

j'avais eu la même erreur parce que j'utilisais exactement le même chaîne à la fois où les clauses

.where("field", ">=", "somestring").where("field", "<=", "somestring") 

Mon code était:

let boxSearch = document.getElementById("boxSearch").value; 

dbRef.collection("clients").where("name", ">=", boxSearch).where("name", "<=", boxSearch).get() 

La solution pour moi, était l'utilisation "somestring" + "~" sur la deuxième clause where comme suit:

dbRef.collection("clients").where("name", ">=", boxSearch).where("name", "<=", boxSearch + "~").get() 

OU

dbRef.collection("clients").orderBy("name").startAt(boxSearch).endAt(boxSearch + "~").get()