sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose uppdatera underdokument om det finns

Så du är en del av vägen dit, men naturligtvis när du inte hittar ett doc då kommer du inte att ha ett doc att arbeta med i återuppringningen. MongoDB har inbyggda sätt att hantera den här typen av uppdateringar, men du måste naturligtvis testa för matchen som du är.

Vad vi kan göra här är att bara arbeta inom true eller false skick för var dokumentet finns.

Överväger vote.value att vara din true eller false för "uppröstningen"

Om du upptäcker att det finns ett matchande dokument kan du utfärda en uppdatering så här:

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

Så det matchar och använder en positionell $ operatör för att se till att index är korrekt av den matchande artikeln uppdateras. Det jag lade till där ser till att du inte ens rör dokumentet där vote.vaule har redan samma värde.

Och i det falska tillståndet vill du $push till arrayen med nya objekt:

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

Lägg naturligtvis till återuppringningsdetaljerna där writeConcern tillämpas, vilket du förmodligen gör.




  1. MongoDB GridFS Filstorlekar enorma för relativt små filer

  2. mongodb aggregerar flera arrayer

  3. Hur uppdaterar man inbäddat dokument i mongoose?

  4. Mongodb aggregeringsfråga för att subtrahera och gruppera kumulativt värde