В комментарии вы задаете вопрос об эффективности. Если вы не имеете дело с экстремальными объемами, сохранение 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). Сохраненная процедура
Если вы используете хранимую процедуру для управления записью в таблицу, вы получаете намного больше контроля.
Я лично рекомендую маршрут хранимой процедуры, но триггеры работают.
Предполагая, что ваши объекты в базе данных mongo выглядят следующим образом:
{
"city": "New York City",
"job": "Assistent"
}
Вы можете сделать запрос вроде:
Jobs.find({
$and: [
{
city: { $in: ["NYC", "Paris"] }
}, {
job: { $in: ["Assistent"] }
}
]
})
Это вернет любой объект, у которого есть город среди массив городов, И работа среди массива вакансий.
Вы можете найти пример здесь , который в вашем контексте предполагает:
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 }; }) }
]
}