Как выполнить предварительную фильтрацию и сортировку (электронная коммерция) с помощью Firestore - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь создать приложение для электронной коммерции, используя firebase firestore, я застрял в фильтрации и сортировке продукта по пользовательскому вводу. Я могу применить все фильтры и сортировку, но я хочу сделать фильтр для пользовательского ввода, и я не могу оставить предложение where пустым

, поэтому я хочу сгенерировать базовый запрос при вводе пользователя без, так что если или оставить предложение where пустое, поэтому оно не влияет на запрос

как я могу сгенерировать запрос динамически

    .collection('allProducts')
    .where('published', '==', true)
    .where('category', 'array-contains-any', keyword)
    .where('color', '==', colorSelected)
    .orderBy('price')
    .where('price', '>', priceRange[0])
    .where('price', '<', priceRange[1])
    .orderBy('createdAt', 'desc');```

1 Ответ

1 голос
/ 11 марта 2020

Запросы Cloud Firestore неизменны. Если вы попытаетесь изменить значение, вызвав, например,

.where('color', '==', colorSelected)

Ваш запрос просто станет новым запросом. Чтобы решить эту проблему, вы должны создать ссылку на коллекцию allProducts, а затем добавить новый фильтр в соответствии с тем, что выбрал пользователь. Это пример:

const db = firebase.firestore();
const allProductsRef = db.collection("allProducts");
const basicQuery;
if(userHasSelectedColor) {
    basicQuery = allProductsRef.where('color', '==', colorSelected);
} else if (userHasSelectedColorAndCategory) {
    basicQuery = allProductsRef.where('color', '==', colorSelected)
                    .where('category', 'array-contains-any', keyword);
}

Таким образом, вы можете связать столько вызовов функций, сколько вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...