Mongoose.Find () с массивами и OR-операторами

В комментарии вы задаете вопрос об эффективности. Если вы не имеете дело с экстремальными объемами, сохранение 8-байтного DATETIME не является значительным накладным расходами по сравнению с использованием, например, 4-байтового INT.

Он также значительно упрощает ваши вставки данных, а также (g10)

Если вам это нужно, будьте осторожны с именами полей. Если в таблице есть uid и id, я ожидаю, что id будет уникальным в этой таблице, а uid - другим. Вместо этого используйте имена полей property_id и amendment_id.

В терминах реализации есть, как правило, два варианта.

1) , Триггер

Реализации различаются, но логика остается неизменной. Поскольку вы не указываете RDBMS (кроме NOT MS / Oracle), общая логика проста ...

  • Запустить транзакцию (часто это неявно уже запущено внутри триггеров)
  • Найти MAX(amendment_id) для вставки свойства_id
  • Обновить вновь вставленное значение с помощью MAX(amendment_id) + 1
  • Зафиксировать транзакцию

Вещи, которые нужно знать, - это ... - вставляются одновременно несколько записей - вставляются записи с уже заполненным изменением_id - обновляются изменения существующих записей

2). Сохраненная процедура

Если вы используете хранимую процедуру для управления записью в таблицу, вы получаете намного больше контроля.

  • Неявно, вы знаете, что имеете дело только с один запись.
  • Вы просто не предоставляете параметр для полей DEFAULT.
  • Вы знаете, какие обновления / удаления могут и не могут произойти.
  • Вы можете реализовать всю необходимую бизнес-логику без скрытых триггеров

Я лично рекомендую маршрут хранимой процедуры, но триггеры работают.

0
задан Alexander 28 February 2019 в 08:43
поделиться

2 ответа

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

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

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

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

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

0
ответ дан Kapcash 28 February 2019 в 08:43
поделиться

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

  • использование 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 }; }) }
  ]
}
0
ответ дан Stock Overflaw 28 February 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: