2016-04-27 6 views
0

を使用している間、私は、以下の機能を持っている:

module.exports.saveClient = function(name) { 
    db.myDatabase.findAndModify({ 
     query: { _id: 'clients' }, 
     update: { $set: { clients: { name: { 
             'name': name, 
             'projects':{} 
             } 
       }}}, 
     new: true 
    } 
}; 

私はこのような関数を呼び出すとき:$セットで

myModule.saveClient(clientName); 

オペレータはそれを次のように読んでいます:

update: { $set: { 'clients': { 'name': { 
             'name': clientName, 
             'projects':{} 
             } 
       }}} 

フィールドの名前は文字列に変換されますので、最初の 'name'は 'clientName' (値は関数の引数として渡されます)。

答えて

1

あなたが変数にオブジェクトのプロパティを入れたい場合は、その後、あなたは次のようにフィールドオブジェクトを構築するためにsquare bracket notationを使用する必要があります。

module.exports.saveClient = function(name) { 
    var clients = {}; 
    clients[name] = { 
     'name': name, 
     'projects':{} 
    }; 
    db.myDatabase.findAndModify({ 
     query: { _id: 'clients' }, 
     update: { $set: { clients: clients }}, 
     new: true 
    } 
}; 

またはcomputed property names (ES6)を使用して:

module.exports.saveClient = function(name) { 
    let clients = { 
     [name]: { 
      'name': name, 
      'projects':{} 
     } 
    } 
    db.myDatabase.findAndModify({ 
     query: { _id: 'clients' }, 
     update: { $set: { clients: clients } }, 
     new: true 
    } 
} 
関連する問題