Динамическое построение агрегатного запроса Mongoose в Node.js - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь построить агрегатный запрос mongoose динамически на основе содержимого переменной массива, переданной в вызове API POST, как показано ниже, но я всегда получаю сообщения об ошибках "$ or / $ и / $ nor. Мне нужны полные объекты " поэтому было бы интересно, если кто-нибудь может просмотреть мой код ниже, пожалуйста, дайте мне знать, что я могу упустить / делать неправильно?

static search (searchData) {
    let { searchTerm, filterBy } = searchData;
    searchTerm = Utils.escapeRegexSpecialCharacters(searchTerm);

    let filterByElementsLength = filterBy.length; 
    if(filterByElementsLength === 0) {
        query.push({
            $match: { 'bookTitle': new RegExp(searchTerm, 'i') },
        });
    }else if (filterByElementsLength > 0) {            
        query.push({
            $match: { $and: [ 
                { 'bookTitle': new RegExp(searchTerm, 'i') },
                filterBy 
            ] }                
        });
    }
}

Учитывая, что содержимое filterBy публикуется какJSON (приложение / json) с использованием Postman со следующим примером содержимого:

"filterBy": [{"author": "Michael White" }, { "Price_Less_Than": "100" }],

Спасибо за вашу поддержку

1 Ответ

0 голосов
/ 29 сентября 2019

Нашел решение, разместив его здесь ниже:

        let matchQry = [];
        matchQry.push({ 'bookTitle': new RegExp(searchTerm, 'i') });

        for(let i = 0; i < filterByElementsLength; i++) {
            matchQry.push(filterBy[i]);             
        }            
        query.push({
            $match: { $and: matchQry }                
        });

Если кто-то думает, что может быть лучшее решение, пожалуйста, дайте мне знать. Спасибо за вашу поддержку

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