Vous pouvez utiliser le Model.prototype.update
en mangouste pour mettre à jour le sous-document timings
.
Cependant, il existe deux scénarios -
- Si vous souhaitez envoyer des entrées sans avoir à vérifier les doublons, utilisez
$push
opérateur
var filter = {
_id: mongoose.Types.ObjectId('<USER_ID>')
};
var update = {
$push: {
timings: {
startTime: "",
endTime: "",
elapsedTime: ""
}
}
};
db.collection.update(filter, update);
- Si vous souhaitez pousser uniquement des entrées distinctes, utilisez
$addToSet
opérateur
var filter = {
_id: mongoose.Types.ObjectId('<USER_ID>')
};
var update = {
$addToSet: {
timings: {
startTime: "",
endTime: "",
elapsedTime: ""
}
}
};
db.collection.update(filter, update);
Remarque :Nécessite mongoose
d'abord
const mongoose = require('mongoose');
Corrigez votre code ci-dessous, vous ne pouvez pas non plus obtenir l'identifiant exact du sous-document, mais vous pouvez obtenir le document racine mis à jour -
const updatedUser = await User.findOneAndUpdate({
_id: mongoose.Types.ObjectId(req.body._id)
},
{
$addToSet: {
timings: {
startTime,
endTime,
elapsedTime
}
}
}, {
new: true
}).exec();