router.post("/", (req, res) => {
User.findOneAndUpdate(req.user,
{$push:{
budget: {
earnings: req.body.earning
}
}
}
)
console.log(req.user);
})
Здесь вы не предоставляете функцию обратного вызова для User.findOneAndUpdate (), и без такой функции все, что вы делаете - это запрашиваете базу данных без сохранения чего-либо.
Взято из пн goose документы о Model.findOneAndUpdate ()
A.findOneAndUpdate(conditions, update, options, callback) // executes
A.findOneAndUpdate(conditions, update, options) // returns Query
A.findOneAndUpdate(conditions, update, callback) // executes
A.findOneAndUpdate(conditions, update) // returns Query -> This is what you are doing right now.
A.findOneAndUpdate() // returns Query
Кроме того, ваш синтаксис неправильный, поэтому, вероятно, вы получаете неопределенное значение. Это должно быть Users.findOneAndUpdate({ username: req.user },.....
или где хранится ваш req.user
ключ имени пользователя, который содержит объект запроса.
Вы можете переписать всю функцию, используя async / await, следующим образом:
router.post("/", async (req, res) => {
const update = await User.findOneAndUpdate(
{ username: req.user.username },
{
$push: {
budget: {
earnings: req.body.earning
}
}
}
)
console.log(update);
});
У меня нет простого способа протестировать обновление $push
, поэтому я предполагаю, что вы знаете, что делаете, но все остальное должно быть так, как описано.