WedX - журнал о программировании и компьютерных науках

Игнорировать неопределенные значения, которые передаются в параметре объекта запроса для функции поиска Mongoose?

So:

Sound.find({
  what: req.query.what,
  where: req.query.where,
  date: req.query.date,
  hour: req.query.hour}, function(err, varToStoreResult, count) {
  //stuff
});

Скажите, что только req.query.what имеет фактическое значение, например «yes», а все остальные (req.query.where, req.query.date и т. д.) не определены/пусты. Если я оставлю этот код как есть, он будет искать документы, которые имеют значение what = req.query.what AND where = req.query.where и т. д., но я бы хотел, чтобы он находил только документы, у которых значение what = to req .query.what, поскольку остальные поля не определены/пусты.


Ответы:


1

Вы должны сначала отфильтровать свой объект res.query от неопределенных/пустых значений, а затем передать его функции find. Если у вас всего несколько свойств, вы можете использовать оператор if:

const query = req.query;
const conditions = {};

if (query.what) {
  conditions.what = query.what;
}

if (query.where) {
  conditions.where = query.where;
}

....


Sound.find(conditions, function () {});

Или, если есть много свойств, вы можете перебирать их:

const query = req.query;
const conditions = Object.keys(query)
  .reduce((result, key) => {
    if (query[key]) {
      result[key] = query[key];
    }
    return result;
}, {}); 

Sound.find(conditions, function () {});

Кроме того, я бы не советовал удалять свойства из фактического объекта res.querydelete res.query.what — потому что вы не сможете использовать его в другом промежуточном программном обеспечении, если захотите.

31.10.2018

2

Вы можете использовать простое сокращение на Object.entries

const req = {query: {a: 1,b: undefined,c: 2}}

const query = Object.entries(req.query).reduce((a, [k, v]) => {
  if (v !== undefined) {
    a[k] = v;
  }
  return a
}, {});

console.log(query)

31.10.2018

3

Я надеюсь, что хорошо вас понимаю, это мой личный метод, который я использую для таких запросов или какой-то фильтрации:

var query = {}; /*this is our object*/

if(req.query.sell) {  /* if request is valid and not null/undefined/empty*/

var sell = req.query.sell; /*we past the query with in a variable as a value*/

var Som = "firstname"; /*after that we define our mongodb parametre as a name */

 query[Somesort] = Som; /*and here we past our name and value of parameter to object*/

}
/*and we do this*/
   collection-name-here.find(query, function(err, model-name-here){
        if(err){
            console.log(err);
        } else {
        /*your code
    });

надеюсь, это поможет вам, ребята

19.06.2021
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]