2017-07-27 17 views
0

私はMongooseモデルのさまざまなタイプのオプションを更新するための単一の関数を作成しようとしていましたが、この奇妙な動作に遭遇しました。 ここに私がやろうとしていたことがあります。私のような何かしようとした場合Mongoose findOneAndUpdateがスイッチケースの値を受け付けていません

module.exports.updateUser = function(id, action, status, callback) { 
const query = { 
    _id: id 
}; 

let field = ''; 
switch (action) { 
    case 'download': 
     field = 'download_permission'; 
     break; 
    case 'upload': 
     field = 'upload_permission'; 
     break; 
    case 'view': 
     field = 'view_permission'; 
     break; 
    case 'edit': 
     field = 'edit_permission'; 
     break; 

} 
User.findOneAndUpdate(query, { 
    $set: { 
     field: status, 
     last_updated: moment().format('llll') 
    } 
}, callback); 

}; 

今、:

User.findOneAndUpdate(query, { 
$set: { 
    'edit_permission': status, 
    last_updated: moment().format('llll') 
} 
}, callback); 

}; 

を実際にMongoDBの内のドキュメントを更新します。 誰かが2番目の作品が最初の作品ではない理由を説明することはできますか(文書は更新されません)。ありがとう。

答えて

2

ES6で、ブラケット表記を使用してcomputed keysを定義することができます。

私はあなたがキーとして変数を持つことができると思う...あなたはそのように置く場合...変数自体が文字列になり、キーになります...変数の値が文句を言わない見えるいけない
User.findOneAndUpdate(query, { 
    $set: { 
     [field]: status, 
     last_updated: moment().format('llll') 
    } 
}, callback); 
2
User.findOneAndUpdate(query, { 
    $set: { 
     problem ------->>>>field<<<<<: status, 
     last_updated: moment().format('llll') 
    } 
}, callback); 

フィールドオブジェクトのパラメータは、変数fieldの値に解決されません。

これはそれを修正する必要があります

const setStatement = { 
    last_updated: moment().format('llll') 
}; 
setStatement[field] = status; 

User.findOneAndUpdate(query, { 
    $set: setStatement 
}, callback); 
1

キーの場所に

関連する問題