2

多数の 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);
4

2 に答える 2

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.$.');
于 2013-01-14T15:11:57.337 に答える