2017-07-27 3 views
0

Ich habe versucht, eine einzige Funktion zu erstellen, um verschiedene Arten von Optionen im Mongoose-Modell zu aktualisieren, und stieß auf dieses seltsame Verhalten. Hier ist, was ich versucht habe zu tun.Mongoose findOneAndUpdate akzeptiert keine Switch-Case-Werte

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); 

}; 

Nun, wenn ich versuche, so etwas wie:

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

}; 

Es aktualisiert das Dokument tatsächlich im mongodb. Kann mir jemand erklären, warum der zweite funktioniert und nicht der erste (aktualisiert das Dokument nicht). Vielen Dank.

Antwort

2

In ES6 Sie computed keys mit Klammer-Notation definieren.

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); 

Das Objekt param Feld wird nicht auf den Wert Ihrer Variable field lösen.

Dies sollte es beheben:

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

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

Ich denke nicht, Sie eine Variable als Schlüssel haben können ... Wenn Sie es so sagen ... die Variable selbst wird zu einem String und wird der Schlüssel ... der Wert der Variablen wird nicht erscheinen in Schlüsselposition

Verwandte Themen