Firebase: Firestore Query для самого длинного матча - PullRequest
0 голосов
/ 11 сентября 2018

Мой документ выглядит так:

ABC: 1
ABCD: 2
ABCDE: 3
ABCDEF: 4

Я хочу запросить самое длинное совпадение, другими словами, myVar = ABCDEFGHIJ, и мне нужно поле со значением 4 (самое длинное совпадение).

Вот пример использования - поиск скидки для применения к номеру детали / единице хранения (sku).Допустим, у вас есть семейство продуктов со общей скидкой 10%, однако для серии продуктов этого семейства действует промо-скидка 20%, например, FORD-ESCAPE, FORD-MUSTANG, FORD-ANYTHING - скидка 10%, но для грузовых автомобилейтакие как FORD-F150, FORD-F250 и FORD-F350 имеют скидку 20%.

Таким образом, документ «скидка» выглядит следующим образом:

"FORD-": 0.1
"FORD-F" : 0.2

Моя переменная "FORD-F250".Как запросить самое длинное совпадение, в котором указана скидка?

1 Ответ

0 голосов
/ 13 сентября 2018

Судя по отзывам, самый длинный запрос на совпадение в данный момент не поддерживается в Firestore. Однако я смог создать свою собственную облачную функцию, а затем Вызвать функции из вашего приложения . JavaScript ниже Node.js работает для меня:

exports.getDiscount = functions.https.onCall((data, context) => {
    var item = data.item;
    var make = data.make;
    var baseDiscount = 0;
    var baseDiscountId = "";
    var discount = 0;
    var discountMatchDepth = 0;
    if (make === "ford"){
        baseDiscountId = "ford-base-discount";
    }
    if (make === "chevy"){
        baseDiscountId = "chevy-base-discount";
    }    
    //fetchDiscounts() simply pushes each sku-prefix/discount to array of arrays
    return fetchDiscounts().then(function(discounts) {
        //calculate discount
        for (var i = 0; i < discounts.length; i++) {
            if (discounts[i][0] === baseDiscountId) {
                baseDiscount = discounts[i][1];
            }
            if (item.startsWith(discounts[i][0])) {
                if (discounts[i][0].length > discountMatchDepth) {
                    discountMatchDepth = discounts[i][0].length;
                }
                discount = discounts[i][1];
            }
        }
        if(discount === 0) {
            discount = baseDiscount;
        } 
        return {discount: discount};
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...