Как я могу заставить этот запрос использовать мою переменную вместо жестко закодированного 0?
let pos = 0;
{$set: {'answers.0.acknowledged': data}}
Вы можете использовать ES6 Интерполяция строк и Имена вычисляемых свойств для создания ключа для $set
:
let pos = 0;
let data = 'some data';
let q = {$set: {[`answers.${pos}.acknowledged`]: data}}
console.info(q);
Обычно вы выбираете шаблонные литералы, Array.join, String.concat и т. д.:
let pos = 0;
let data = 'data';
let query = {$set: {[['answers.', pos,'.acknowledged'].join('')]: data}}
console.info(query);
let pos = 0;
let data = 'data';
let query = {$set: {['answers.'.concat(pos,'.acknowledged')]: data}}
console.info(query);
Array.join, String.concat гораздо лучше поддерживаются браузерами, чем шаблонные литералы не. Если бы они использовались на стороне клиента. В вашем случае, если вы используете их на заднем конце, вам, вероятно, не о чем беспокоиться.