Обновление массива в указанном c индексе с использованием Mongoose - PullRequest
0 голосов
/ 14 июля 2020

У меня есть коллекция документов в 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);
   }
 });

, но это не работает. Я дважды проверил, работает ли индексатор. Ошибок нет, просто документ не обновляется.

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