Я пытаюсь создать маршрут, который принимает 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"));
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Из Документация 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"));
});
Я использую дату как свой уникальный ключ, он работает вне foreach, но не внутри, это моя проблема.
Я только что попробовал, к сожалению, тот же результат, если я поставлю Card.updateOne({date: firstDate}, {$set: {date: secondDate}}); с кавычками и без них оба работают вне функции foreach
Таким образом, в блоке если вы проверяете card.id === firstDate не должны ли вы проверять card.date === firstDate, потому что вы используете дату, поскольку ваш фильтр Mongo не имеет я бы, а _я бы возвращает objectID
упс, на самом деле это просто опечатка, спасибо за это, но даже сейчас не работает обновление
Почему бы вам не использовать для каждого, предоставленный mongoDB, например cards=> card.find().forEach(card=>.. then so on)
Хм, не покажешь мне? Я никогда не видел этого раньше
Я обновил свой ответ, он должен работать, но я его не проверял, поэтому дайте мне знать, если появится какая-либо ошибка.
Давайте продолжить обсуждение в чате.
да, он у меня есть, но он все еще не работает, я обновлю свой текущий до того, как он был у меня