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

Mongoose opdatere underdokument, hvis det findes

Så du er en del af vejen dertil, men selvfølgelig når du ikke finder en doc så har du ikke et doc at arbejde med i tilbagekaldet. MongoDB har indbyggede måder at håndtere denne slags opdateringer på, men du skal selvfølgelig teste for kampen som du er.

Det, vi kan gøre her, er bare at arbejde inden for true eller false betingelse for, hvor dokumentet findes.

Overvejer vote.value at være din true eller false for "op-stemmen"

Hvor du finder, at der er et matchende dokument, kan du udstede en opdatering som denne:

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

Så det matcher og bruger en positionel $ operatør for at sikre det korrekte indeks af den matchende vare opdateres. Det, jeg tilføjede der, sikrer, at du ikke engang rører ved dokumentet, hvor vote.vaule er allerede af samme værdi.

Og i den falske tilstand vil du $push på arrayet med den nye element:

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

Tilføj selvfølgelig tilbagekaldsdetaljerne, hvor writeConcern anvendes, hvilket du sandsynligvis gør.




  1. PHP kan ikke indlæse dynamisk bibliotek (mongo.so)

  2. Mongoose + lodash udvider kopieringsarrayet af objektet forkert

  3. Meteor JS :Klient får ikke data fra Mongo DB

  4. Skal jeg bruge redis til at gemme et stort antal binære filer?