带有mongoose子文档的HTTP PATCH语义

时间:2013-01-14 14:25:20

标签: node.js mongodb express 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);

2 个答案:

答案 0 :(得分:1)

你可以制作这样的函数:

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.$.');

答案 1 :(得分:0)

我考虑过JsonPatch这个项目将json补丁转换为mongo原子更新:jsonpatch-to-mongodb