Моя схема пользователя выглядит следующим образом
{
_id:ObjectId("6e9465528a15ba6")
name: 'XYZ',
email: 'abc@gmail.com',
transactions: [
{
_id:ObjectId("5e946557a5128a15ba6"),
date: 2020-04-09T06:00:30.000Z,
type: 'type1',
category: 'category1',
description: 'some desc',
}
]
}
Я хочу обновить некоторые поля транзакции с указанием c id. Но не происходит.
Я попытался найти решение, ответив на Пн goose, обновить значения в массиве объектов на этот вопрос.
Может быть мой _id
имеет введите ObjectId
и идентификатор, полученный из моего запроса, является строкой? Итак, как я могу решить эту проблему?
Мой код похож на это, но все еще вызывает ошибку user.transactions._id is not function
app.post('/api/update', function (req, res) {
const {
id,
email,
date,
type,
category,
description
} = req.body;
User.findOne({email}, function (err, user) {
if (err) {
console.error(err);
res.status(500)
.json({
error: 'Internal error please try again'
});
} else if (!user) {
res.status(401)
.json({
error: 'Incorrect email or password'
});
} else {
const objectId = mongoose.Types.ObjectId(id);
let transaction = user.transactions._id(objectId);
transaction.date = date;
transaction.type = type;
transaction.category = category;
transaction.description = description;
user.save((err, data) => {
if (err) return res.send(err);
return res.sendStatus(200);
});
}
});
});