HTTP PATCH语义与mongoose子文档

我有一个包含多个Layer子文档的Map文档,并希望实现HTTP PATCH,因此只有JSON的给定属性才能更新Layer子文档。 下面的代码工作,但我必须指定每个可以更改的属性。 有没有更好的方法来做到这一点?

var update = {}; if (req.body.name !== undefined) update['layers.$.name'] = req.body.name; if (req.body.isDefault !== undefined) update['layers.$.isDefault'] = req.body.isDefault; if (req.body.isPublic !== undefined) update['layers.$.isPublic'] = req.body.isPublic; Map.model.findOneAndUpdate({_id: req.params.mapId, 'layers._id': req.params.layerId}, update, callback); 

你可以像这样做一个函数:

 function updateParams(reqParams,additionalInfo) { var update = {}; for(var paramName in reqParams) { if(reqParams.hasOwnProperty(paramName)) { if(reqParams[paramName]!==undefined) { update[additionalInfo+paramName] = reqParams[paramName]; } } } return update; } updateParams(req.body,'layers.$.'); 

我有你认为JsonPatch这个项目转换json补丁到mongoprimefaces更新:jsonpatch到mongodb