Обновление одного mongodb без изменения других объектов - PullRequest
1 голос
/ 01 февраля 2020

Давайте посмотрим на приведенный ниже пример

MongoDB Schema

Я хочу обновить только одну запись в моем ExpensesHouse, чтобы создать следующий код

router.post("/editExpense/:id", ensureAuthenticated, (req, res) => {
  var id = mongoose.Types.ObjectId(req.params.id);
  House.updateOne(
    { "expensesHouse._id": id },
    {
      $set: {
        expensesHouse: {
          _id: id,
          expenseType: req.body.expenseType,
          description: req.body.description,
          price: req.body.price,
          status: req.body.status,
          userID: req.user.id
        }
      }
    }
  ).then(house => {
    req.flash("success_msg", "Expenses Updated");
    res.redirect("/houses/dashboard");
  });
});

Работает нормально и может обновлять запись, но так как у меня 2 или более объектов, все остальные пропали. Поэтому, когда я обновляю, предположим, что 1: Object, costType: Water и я меняем тип расхода на другой, 0: Object просто исчезает, и мне нужно обновить только регистр с _id: id

Ниже вас можно увидеть результат после UpdateOne

MongoDB Afeer Update

1 Ответ

1 голос
/ 01 февраля 2020

Попробуйте это:

router.post("/editExpense/:houseId/:id", ensureAuthenticated, (req, res) => {
  var id = mongoose.Types.ObjectId(req.params.id);
  var houseId : mongoose.Types.ObjectId(req.params.houseId);
  House.updateOne(
    { "_id": houseID, "expensesHouse._id": id },
    {
      $set: {
          expensesHouse.$.expenseType: req.body.expenseType,
          expensesHouse.$.description: req.body.description,
          expensesHouse.$.price: req.body.price,
          expensesHouse.$.status: req.body.status,
          expensesHouse.$.userID: req.user.id
        }
      }
    }
  ).then(house => {
    req.flash("success_msg", "Expenses Updated");
    res.redirect("/houses/dashboard");
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...