Model.prototype.update
を使用できます
マングースでサブドキュメントのtimings
を更新します 。
ただし、2つのシナリオがあります-
- 重複をチェックせずにエントリをプッシュする場合は、
$push
オペレーター
var filter = {
_id: mongoose.Types.ObjectId('<USER_ID>')
};
var update = {
$push: {
timings: {
startTime: "",
endTime: "",
elapsedTime: ""
}
}
};
db.collection.update(filter, update);
- 個別のエントリのみをプッシュする場合は、
$addToSet
オペレーター
var filter = {
_id: mongoose.Types.ObjectId('<USER_ID>')
};
var update = {
$addToSet: {
timings: {
startTime: "",
endTime: "",
elapsedTime: ""
}
}
};
db.collection.update(filter, update);
注:mongoose
が必要です 最初
const mongoose = require('mongoose');
コードを以下に修正します。また、正確なサブドキュメントのIDを取得することはできませんが、更新されたルートドキュメントを取得することはできます-
const updatedUser = await User.findOneAndUpdate({
_id: mongoose.Types.ObjectId(req.body._id)
},
{
$addToSet: {
timings: {
startTime,
endTime,
elapsedTime
}
}
}, {
new: true
}).exec();