#javascript #node.js #mongodb #mongoose
#javascript #node.js #mongodb #mongoose
Вопрос:
У меня есть документ, хранящийся в mongo, который, среди прочего, содержит тип свойства массива с кучей объектов внутри. Я пытаюсь поместить объект в этот массив. Однако каждый объект, который помещается в массив, содержит объект date. Мне нужно, чтобы это работало, если объект с этой датой уже существует, тогда не помещайте новый объект в массив.
Я некоторое время играл с ним, пытаясь запустить запросы update и elemMatch и т. Д., Но я не могу понять это. У меня есть длинная версия ниже, как вы можете видеть, я делаю 2 отдельных запроса к базе данных, может кто-нибудь помочь мне свести это к чему-то более простому?
UserModel.findById(req.user._id, (err, doc) => {
if (err) {
return res.sendStatus(401);
}
const dateExists = doc.entries.find((entry) => entry.date === date);
if (dateExists) {
res.sendStatus(401);
} else {
UserModel.findByIdAndUpdate(
req.user._id,
{
$push: {
entries: {
date,
memo,
},
},
},
{ safe: true, upsert: true, new: true },
(err, doc) => (err ? res.sendStatus(401) : res.sendStatus(200))
);
}
});
Спасибо.
Ответ №1:
db.users.updateOne({
_id: req.user._id,
"entries.date": date,
},
{
$push: {
entries: {date,memo},
}
})
https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/index.html