MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose aggiorna il documento secondario se esiste

Quindi sei parte del percorso, ma ovviamente quando non trovi un doc allora non avrai un doc con cui lavorare nella richiamata. MongoDB ha modi nativi per gestire questo tipo di aggiornamenti, ma ovviamente è necessario testare la corrispondenza come sei.

Quello che possiamo fare qui è lavorare all'interno del true o false condizione di esistenza del documento.

Considerando vote.value essere il tuo true o false per il "voto positivo"

Laddove trovi un documento corrispondente, puoi emettere un aggiornamento come questo:

Question.update(
  { 
    _id: questionId, 
    "votes.createdBy" vote.createdBy,
    "votes.up": {"$ne": vote.value }
  },
  { $set: { "votes.$.up": vote.value } }
);

In modo che corrisponda e utilizzi un posizionale $ operatore per assicurarsi che l'indice corretto dell'elemento corrispondente viene aggiornato. Quello che ho aggiunto lì fa in modo che tu non tocchi nemmeno il documento in cui si trova vote.vaule ha già lo stesso valore.

E nella condizione falsa vuoi $push nell'array con il nuovo oggetto:

Question.update(
  { 
    _id: questionId
  },
  { 
    $push: { 
      "votes": {
        "up": vote.value,
        "createdBy": vote.createdBy
      }
    }
  }
);

Ovviamente aggiungi i dettagli della richiamata dove writeConcern viene applicato, cosa che probabilmente fai.