Я пытаюсь выполнить запрос UPDATE с помощью оператора executeMany. Я попытался выполнить команду execute в асинхронном цикле forEach следующим образом:
export const asyncForEach = async (array, callback) => {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
, затем некоторые динамические определения
export const buildDynamicDefs = (data,enumRef) => {
const defs = {...data};
Object.keys(defs).forEach(key => defs[key] = enums.typeDefs[enumRef][key])
return defs;
};
, а затем, наконец, выполнить вызов
...
await asyncForEach(dataArray, async (device) => {
response[device.deviceId] = await connection.execute(
queryPut(device),
{
bind1,
...device,
},
{
autoCommit: false,
bindDefs: {
bind1,
...buildDynamicDefs(device,'enumName'),
},
},
)
})
и запрос выглядит следующим образом:
export const queryPut = data => `
UPDATE status
SET MANDATORY_PROP1=:bind4
${data.bind2 && ',OPT_PROP1=:bind2' || ''}
${data.bind3 && ',OPT_PROP2=:bind3' || ''}
WHERE MANDATORY_PROP2=:bind1 AND MANDATORY_PROP3=:bind5`;
Проблема в том, что когда я использую executeMany, я не знаю, как сказать запросу, как он должен выглядеть
.executeMany(query,arrayOfObject-binds,options)
Есть только один запрос. И мой массив объектов может выглядеть следующим образом:
[
{
bind1: 1,
bind4: 4,
bind5: 5,
},
{
bind1: 1,
bind2: 2,
bind4: 4,
bind5: 5,
},
]
Есть ли возможность добавить или включить этот набор OPT_PROP1 =: bind2 в sql? Есть ли какая-нибудь проверка на нулевое значение привязки?
С execute это работает, но я не думаю, что это эффективно для большого количества данных.
Спасибо,