Il tuo update
l'istruzione non è corretta, contiene argomenti fuori posto - stai inserendo più $set
operazioni e opzioni come parametri diversi dal metodo di aggiornamento; dovrebbero trovarsi in parametri di aggiornamento designati separati. La corretta sintassi
di Node.js è:
update(selector, document, options, callback)
dove selector
è un oggetto che è il selettore/query per l'operazione di aggiornamento, document
è anche un oggetto che è il documento di aggiornamento e infine un options
oggetto che per impostazione predefinita è nullo e ha le impostazioni di aggiornamento facoltative.
Ecco che stai facendo
update(selector, document, selector, document, options, options, callback)
In cui mongo sta aggiornando la raccolta utilizzando i primi due parametri come corretti e genera naturalmente l'errore
perché sono stati specificati troppi parametri errati.
Inoltre, hai un uso errato dell'operatore posizionale. Dovrebbe essere parte del documento da aggiornare, non nella query.
Per la corretta implementazione, segui questo aggiornamento
db.getCollection('profiles').update(
/* selector */
{
"_id": ObjectId("57a9aa24e93864e02d91283c"),
"ratings.round": 1
},
/* update document */
{
"$set": {
"presentRound": 2,
"interviewStatus": "in process",
"scheduleInterviewStatus": false,
"ratings.$.roundStatus": "selected"
}
},
/* optional settings */
{ upsert: true, multi: true }
)