模型结构:
{ _id: String, calc: [ { preset: String, datasets: [ { _id: String } ] } ] }
API路由:
router.put('/:gameId/:preset/:datasetId', (req, res) => {
Game.findOneAndUpdate({ _id: req.params.gameId, 'calc.preset': req.params.preset, 'calc.datasets._id': req.params.datasetId },
{ $set: { 'calc.$.datasets.$': req.body } })
.then(() => res.status(200).json({ ...req.body, _id: req.params.datasetId }))
.catch(err => res.status(500).json({ error: err }));
});
如果要更新calc数组中的对象,则需要:
$set: {'calc.$': newCalc}
,因此我采用了同样的方法来更新位于对象内部的数据集数组中的对象,该对象又位于calc数组内部的另一个对象中,但是,$set:{'calc.$.datasets.$':newDataset}
不能正常工作。如何更新具有req.params.preset预设的calc数组对象中的数据集数组内部具有_id:req.params.datasetId的对象?
简而言之:
{calc:[{datasets:[ {将此对象设置为新数据集} ]}]}