Как мне создать индексирование для запросов на заказ нескольких каминов? - PullRequest
0 голосов
/ 19 февраля 2019

Моя модель камина похожа на

{продукты: ['сливочное масло, сыр': {"Энергия - ккал": 122, "Углеводы - г": 33, "Жиры - г":23}.,]}

let query = db.collection("foods");
let list = ["Energy - kcal","Carbohydrate - g"];
for(let i=0;i<list.length;i+=1) {
    let each = list[i];
    switch (each) {
        case "Energy - kcal":
            query = query.orderBy("Energy - kcal","desc");
            break;
        case "Carbohydrate - g":
            query = query.orderBy("Carbohydrate - g","desc");
            break;
        case "Cholesterol - g":
            query = query.orderBy("Cholesterol - g","desc");
            break;
        case "Fat - g":
            query = query.orderBy("Fat - g","desc");
            break;
        case "Protein - g":
            query = query.orderBy("Protein - g","desc");
            break;
        case "Fatty acids - g":
            query = query.orderBy("Fatty acids - g","desc");
            break;
        case "Sodium - mmg":
            query = query.orderBy("Sodium - mmg","desc");
            break;
        case "Potassium - mmg":
            query = query.orderBy("Potassium - mmg","desc");
            break;
        case "sugar":
            query = query.orderBy("sugar","desc");
            break;
        case "fiber":
            query = query.orderBy("fiber","desc");
            break;
        case "calcium":
            query = query.orderBy("calcium","desc");
            break;
        case "iron":
            query = query.orderBy("iron","desc");
            break;
        case "vitamin_a":
            query = query.orderBy("vitamin_a","desc");
            break;
        case "vitamin_c":
            query = query.orderBy("vitamin_c","desc");
            break;
    }
}

Я попытался проиндексировать все атрибуты в порядке убывания, но все еще получаю enter image description here

Ошибка: 9 FAILED_PRECONDITION:Для запроса требуется индекс

Каким должен быть правильный способ определения того, какие поля используются при индексации и как я могу воспользоваться возможностью Cloud Firestore объединять индексы?

Спасибо

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете воспользоваться объединением индексов только в том случае, если в запросе используется несколько (цепочечных) where() вызовов функций.Поскольку в вашем запросе всегда будет одиночный where() вызов, основанный на одном значении из этого list вместе с вызовом orderBy(), вы не сможете ничего объединить.Поэтому вам нужно создать индекс для каждого свойства в отдельности.

Редактировать:

Согласно вашему комментарию, если вам нужно запросить данные по 14 свойствам отдельно изаказать их в то же время, это решение.Это не очень хорошо, но это то, что у вас есть.В вашем случае я рекомендую развернуть индексы с помощью Firebase CLI .

...