Mongoose.Find () с массивами и OR-операторами - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь найти строки базы данных, которые соответствуют объекту json.

Пример:

var searchParams = {
    city: ['New York City', 'Budapest'], 
    jobs: ['Assistent'] //Can be multiple 
}

//If "city" is equal to one of the searchParams.city variables
//AND jobs is equal to one of the searchParams.jobs variables

var searchQuery = {
    $and: [
        {$or: clean_city},
        {$or: clean_cat}
    ]
}

Jobs.find(searchQuery, function(err, list){
    console.log(list);
});

Я перепробовал все варианты, которые мог найти в Google, но, похоже, ничего не работает с массивами.

Я был бы очень благодарен, если бы кто-нибудь мог помочь.

С уважением

Ответы [ 2 ]

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

Предполагая, что ваши объекты в базе данных mongo выглядят так:

{
   "city": "New York City",
   "job": "Assistent"
}

Вы можете сделать запрос вроде:

Jobs.find({
   $and: [
      {
         city: { $in: ["NYC", "Paris"] }
      }, {
         job: { $in: ["Assistent"] }
      }
   ]
})

Это вернет любой объект, у которого есть город средимассив городов И задание среди массивов заданий.

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

Вы можете найти пример здесь , который в вашем контексте предполагает:

  • использование searchParams, поскольку я не знаю, что в clean_*переменные
  • поля БД: city и job
{
  $and: [
    { $or: searchParams.city.map(city => ({ city })) },
    { $or: searchParams.jobs.map(job => ({ job })) }
  ]
}

Что является более коротким синтаксисом для (в случае, если имена полей БД различны, вы не можете сократить его):

{
  $and: [
    { $or: searchParams.city.map((city) => { return { city: city }; }) },
    { $or: searchParams.city.map((job) => { return { job: job }; }) }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...