sql >> Database >  >> NoSQL >> MongoDB

Mongoose update subdocument indien aanwezig

Dus je bent een deel van de weg daarheen, maar natuurlijk als je geen doc vindt dan heb je geen doc om mee te werken bij het terugbellen. MongoDB heeft native manieren om met dit soort updates om te gaan, maar je moet natuurlijk wel testen voor de match zoals je bent.

Wat we hier kunnen doen is gewoon werken binnen de true of false staat van waar het document bestaat.

Gezien vote.value om je true te zijn of false voor de "upvote"

Als je vindt dat er een overeenkomend document is, kun je een update als volgt uitgeven:

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

Dus dat komt overeen met en gebruikt een positioneel $ operator om ervoor te zorgen dat de juiste index van het overeenkomende item wordt bijgewerkt. Wat ik daar heb toegevoegd, zorgt ervoor dat je niet eens het document aanraakt waar de vote.vaule is al van dezelfde waarde.

En in de valse toestand wil je $push op de array met de nieuwe artikel:

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

Voeg natuurlijk de callback-details toe waar writeConcern wordt toegepast, wat u waarschijnlijk doet.




  1. Heroku-app verbinden met Atlas MongoDB Cloud-service

  2. Mongodb:documenten sorteren op array-objecten

  3. Wat is er nieuw in MongoDB 4.2

  4. ConnectionMultiplexer.Verbinding verbreekt tijdens verbinding met redis-server