Функция для обмена значениями в NodeJS с mongo+mongoose

Я пытаюсь создать маршрут, который принимает 2 даты и обменивает эти даты друг с другом в базе данных.

консоль печатает, но данные в бд не меняются

// @route   PATCH api/swap
// @desc    replace date
// @access  Public

router.put("/swap", (req, res) => {
  const firstDate = req.body.firstDate;
  const secondDate = req.body.secondDate;

  // console.info(firstDate, secondDate);

  // Card.updateOne({ date: firstDate }, { $set: { date: secondDate } });

  Card.find()
    .then(cards => {
      cards.forEach(card => {
        if (card.date === firstDate) {
          return card.updateOne(
            { date: firstDate },
            { $set: { date: secondDate } }
          );
        } else if (card.date === secondDate) {
          return card.updateOne(
            { date: secondDate },
            { $set: { date: firstDate } }
          );
        } else {
          return card;
        }
      });
    })
    .then(() => console.info("working"));
});
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
231
1

Ответы 1

Из Документация Mongo UpdateOne UpdateOne принимает 3 аргумента фильтр, Обновить, Перезвоните, поэтому я считаю, что вам нужно передать _я бы коллекции для изменения.

Update-find() возвращает курсор и для использования foreach преобразует его в массив с помощью find().toArray().then(..so on)

// @route   PATCH api/swap
// @desc    replace date
// @access  Public

router.put("/swap", (req, res) => {
const firstDate = req.body.firstDate;
const secondDate = req.body.secondDate;

console.info(firstDate, secondDate);

Card.find().toArray().then(cards=>cards.forEach(card => {
    if (card.date === firstDate) {
      return card.updateOne( { date: firstDate } ,{ $set: { date: secondDate } });
    } else if (card.date === secondDate) {
      return card.updateOne( { date: secondDate },{ $set: { date: firstDate } });
    } else {
      return card;
    }
  });
}))
.then(() => console.info("working"));
 });

да, он у меня есть, но он все еще не работает, я обновлю свой текущий до того, как он был у меня

Mateen Kazia 13.03.2019 06:09

Я использую дату как свой уникальный ключ, он работает вне foreach, но не внутри, это моя проблема.

Mateen Kazia 13.03.2019 06:15

Я только что попробовал, к сожалению, тот же результат, если я поставлю Card.updateOne({date: firstDate}, {$set: {date: secondDate}}); с кавычками и без них оба работают вне функции foreach

Mateen Kazia 13.03.2019 06:24

Таким образом, в блоке если вы проверяете card.id === firstDate не должны ли вы проверять card.date === firstDate, потому что вы используете дату, поскольку ваш фильтр Mongo не имеет я бы, а _я бы возвращает objectID

Shivam Sood 13.03.2019 06:26

упс, на самом деле это просто опечатка, спасибо за это, но даже сейчас не работает обновление

Mateen Kazia 13.03.2019 06:28

Почему бы вам не использовать для каждого, предоставленный mongoDB, например cards=> card.find().forEach(card=>.. then so on)

Shivam Sood 13.03.2019 06:40

Хм, не покажешь мне? Я никогда не видел этого раньше

Mateen Kazia 13.03.2019 06:43

Я обновил свой ответ, он должен работать, но я его не проверял, поэтому дайте мне знать, если появится какая-либо ошибка.

Shivam Sood 13.03.2019 06:49

Давайте продолжить обсуждение в чате.

Shivam Sood 13.03.2019 06:56

Другие вопросы по теме