У меня есть коллекция документов в mongoDB. Одно из свойств схемы имеет массив, содержащий объекты. Каждый объект в этом массиве содержит свойство, значение которого имеет другой массив.
const userSchema = new mongoose.Schema({
username: "",
password: "",
firstName: "",
clients: [],
});
Массив свойств «клиентов» выглядит следующим образом:
[
{
clientName: 'Chabad of Closter',
activeInvoice: [],
pastInvoices: []
},
{
clientName: 'Chabad UC',
activeInvoice: [],
pastInvoices: []
},
{
clientName: 'Chabad Mobile',
activeInvoice: [],
pastInvoices: []
}
]
Моя цель - pu sh Объект в любой из массивов «activeInvoice», используя индекс его объекта. Я использовал этот код, и он работает, когда я указываю индекс вручную:
User.findByIdAndUpdate(id, {"$push": {"clients.2.activeInvoice": newCharge}}, {new : true},
function(err, updatedCharge){
if (err) {
console.log(err)
} else {
console.log(updatedCharge);
}
});
В приведенном выше примере я использовал индекс «2». Мне нужно иметь возможность динамически изменять этот индекс. Я пробовал это:
// code to find the index I want and save it to indexer
const indexer = clientsArr.findIndex(i => i.clientName == newCharge.clientName);
// form it into a string
const mongooseLink = "clients." + indexer + ".activeInvoice";
//place it into the mongoose request
User.findByIdAndUpdate(id, {"$push": {mongooseLink: newCharge}}, {new : true},
function(err, updatedCharge){
if (err) {
console.log(err)
} else {
console.log(updatedCharge);
}
});
, но это не работает. Я дважды проверил, работает ли индексатор. Ошибок нет, просто документ не обновляется.