MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose-Aktualisierungsunterdokument, falls vorhanden

Sie sind also ein Teil des Weges dorthin, aber natürlich, wenn Sie kein doc finden dann haben Sie kein doc im Rückruf zu arbeiten. MongoDB verfügt über native Methoden zur Handhabung dieser Art von Aktualisierungen, aber natürlich müssen Sie die Übereinstimmung testen so wie du bist.

Was wir hier tun können, ist einfach innerhalb des true zu arbeiten oder false Bedingung, wo das Dokument existiert.

Unter Berücksichtigung von vote.value Ihr true sein oder false für die "Upvote"

Wenn Sie feststellen, dass es ein passendes Dokument gibt, können Sie eine Aktualisierung wie folgt herausgeben:

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

Das entspricht und verwendet also eine Position $ Operator, um sicherzustellen, dass der Index korrekt ist des übereinstimmenden Elements wird aktualisiert. Was ich dort hinzugefügt habe, stellt sicher, dass Sie das Dokument, in dem sich die vote.vaule befindet, nicht einmal berühren hat bereits den gleichen Wert.

Und in der falschen Bedingung möchten Sie $push auf das Array mit dem neuen Artikel:

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

Fügen Sie natürlich die Callback-Details hinzu, wo writeConcern angewendet wird, was Sie wahrscheinlich auch tun.