Как обновить вложенный документ?

#node.js #mongoose

#node.js #мангуст

Вопрос:

Я хочу обновить вложенный документ FinanceSchema.Вот моя модель

             const FinanceSchema = new mongoose.Schema({
              moneyToBePaid: {
                type: Number,
              },
            
              moneyPaid: {
                type: Number,
              },
            
              moneyToBeReceived: {
                type: Number,
              },
            
              moneyReceived: {
                type: Number,
              },
            });
            
            const UserSchema = new mongoose.Schema({
              financialInformation: [FinanceSchema],
            });
            module.exports=mongoose.model('user',UserSchema)

 
  

Это маршрут

Я могу публиковать финансовую информацию

         router.post("/users/:id/profile", async (req, res) => {
          const _id = req.params.id;
          const {
            moneyToBePaid,
            moneyPaid,
            moneyToBeReceived,
            moneyReceived,
          } = req.body;
          const finance = {
            moneyToBePaid,
            moneyPaid,
            moneyToBeReceived,
            moneyReceived,
          };
          try {
            const user = await User.findById(_id);
            user.financialInformation.unshift(finance);
            await user.save();
        }
  

Я не могу обновить financeInformation(FinanceSchema) .Я не понимаю, как определить маршрут и обновить его.

Ответ №1:

Попробуйте вызвать markModified(), так как mongoose может не принять изменения автоматически:

 const user = await User.findById(_id);
user.financialInformation.unshift(finance);
user.markModified('financialInformation');
await user.save();
  

Редактировать:

Если вы хотите изменить financialInformation по определенному индексу, вы можете просто выполнить следующее:

 const user = await User.findById(_id);
user.financialInformation[0].moneyReceived = 1000000;
await user.save();
  

Комментарии:

1. Я могу нажать financialInfo в пользовательской схеме. Моя единственная проблема в том, что я не могу обновить определенную financialInfo, которая является массивом.

2. Вы имеете в виду, что хотите обновить financialInformation по определенному индексу? Или все элементы массива?

3. Смотрите мою правку. Там я изменяю значение для moneyReceived индекса 0 .

4. Если это решило вашу проблему, пожалуйста, убедитесь, что вы приняли этот ответ, нажав на галочку слева.

5. Действуйте both.eg . У пользователя есть 3 финансовые данные. Я должен иметь возможность обновить все 3 из них или один из них.