Как обновить, если ключ существует - sequelize - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу обновить свою базу данных, если ключ запроса существует.

это моё действие по обновлению:

      shopsModel.Shop.update({
        name: req.body.name,
        province: req.body.province,
        city: req.body.city,
        address: req.body.address,
        username: req.body.username,
        type: req.body.type,
        ...

Например, я хочу обновить столбец name, если req.body.name не пусто. Какой самый короткий способ сделать это?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Вот, пожалуйста:

let request = {
        name: req.body.name,
        province: req.body.province,
        city: req.body.city,
        address: req.body.address,
        username: req.body.username,
        type: req.body.type,
        ...
}

// With the help of Lodash
request = _.pickBy(request, _.identity); // <--- Will remove empty | null | undefined

Или вы можете использовать Удалить пустые атрибуты из объекта в Javascript и использовать это значение для обновления модели

А потом просто:

shopsModel.Shop.update(request,...);

ПРИМЕЧАНИЕ:

Как я вижу, имя ключа и req.body имена почти одинаковы, так что вы можно напрямую использовать

let request = req.body;
0 голосов
/ 06 ноября 2018

Попробуйте ниже:

shopsModel.Shop.update({
name: req.body.name || undefined,
province: req.body.province || undefinedv,
city: req.body.city || undefined,
address: req.body.address || undefined,
username: req.body.username || undefined,
type: req.body.type || undefined
})

Он обеспечивает возврат только тех ключей, которые вы хотите обновить, и в результате изменяет только те столбцы в БД.

Вы можете создать для него пользовательскую функцию

const  returnIfNotNil = key => key || undefined

и используйте как указано выше

shopsModel.Shop.update({
name: returnIfNotNil(req.body.name),
province: returnIfNotNil(req.body.province),
city: returnIfNotNil(req.body.city),
address: returnIfNotNil(req.body.address),
username: returnIfNotNil(req.body.username),
type: returnIfNotNil(req.body.type)
})

или сделать еще более последовательным (при условии, что вы используете все тело для обновления):

shopsModel.Shop.update(req.body.map(key => returnIfNotNil(key)))

или даже лучше:

shopsModel.Shop.update(req.body.map(returnIfNotNil))
0 голосов
/ 06 ноября 2018

Если у вас есть psql-соединение, вы можете сделать это просто так:

if(req.body.name) {
    client.query('UPDATE table SET name=($1)', [name]);
}

заменить таблицу именем таблицы ...
проверьте это для получения дополнительной информации: https://mherman.org/blog/postgresql-and-nodejs/. (в разделе обновления)

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