@marks26

При запросе в findOneAndUpdate в mongoose дублируется $push, что не так?

При попытки дополнить данные в БД, $push почему-то дублирует их в поле, т.е поле с массивом под названием dates в БД в итоге должно иметь 21 элементов массива, после отправки данных, а на деле их 42. Данные дублируются.

Код запроса к базе данных:
router.post('/set-new-activities', async (req, res) => {
  const { id, activities } = req.body;

  console.log(id);
  console.log(activities);

  await UserCalendar.findOneAndUpdate(
    { _id: new ObjectId(req.session.userId), actions: { $elemMatch: { _id: id } } },
    { $push: { 'actions.$.dates': activities } },
    (err) => {
      if (err) throw err;

      console.log('success');

      res.json('success');
    },
  );
});

Схема:
const { Schema, model } = require('mongoose');

const schema = new Schema({
  name: {
    type: String,
    required: true,
  },
  password: {
    type: String,
    required: true,
  },
  actions: [{
    name: { type: String },
    days: [],
    debt: { type: Boolean, default: false },
    created: { type: Date, default: '2020-03-16' },
    status: { type: Boolean, default: true },
    dates: [{
      year: { type: String },
      month: { type: String },
      day: { type: String },
      status: { type: Boolean, default: false },
    }],
  }],
});

Код POST запроса к серверу:
const obj = {
        id: action._id,
        activities: newActivity,
      };

      const response = await fetch('/set-new-activities', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json;charset=utf-8',
        },
        body: JSON.stringify(obj),
      });

      if (response.ok) {
        console.log('Активность обновлена');
      } else {
        throw new Error(Возникла проблема с fetch запросом. ${response.status});
      }


Вот что в итоге получается в БД:
5e89031c8ca0f430808479.png

А это что console.log на серваке выдало:
5e8903f51bb57118792911.png

Ошибок нет и сам объект с данными отправился один раз. Возможно, я накосячил где-то в запросе к БД. т.к только осваиваюсь в mongoose.
  • Вопрос задан
  • 35 просмотров
Решения вопроса 1
@marks26 Автор вопроса
Короче, вместо $push использовал $addToSet и дублирование прекратилось
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы