sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdaterar ett rekord med mongoose

Du kan använda &elementMatch för att hitta önskad säsong i arrayen, och i setField-objektet kan du använda den positionella $ operator som identifierar det element som matchas i frågan.

Problemet är att om den inte hittar någon säsong som matchar season_number , kommer dokumentet inte att uppdateras. I det här fallet kan du ställa in en annan uppdateringsfråga för att lägga till den här säsongen under seasons array.

router.put('/api/shows/:id/seasons/:sid', function(req, res){

  var query = {
    "_id": req.params.id,
    "seasons": { 
      $elemMatch: { 
        "season_number": req.params.sid 
      } 
    }
  }

  var setField = {
    $addToSet: {
      "seasons.$.episodes": req.body
    }
  }

  TV.findOneAndUpdate(query, setField, {upsert:true}, function(err, results){
    if (err && err.code == 16836) { // no document was matched
      var season = {
        "season_number": req.params.sid
        "episodes": [ req.body]
      }
      TV.findOneAndUpdate({"_id": req.params.id}, {$push: {"seasons": season}} , function(err, result) {
          console.log("Inserted document in array");
          res.json(result)
      }); 
    }
    else if (err){
       console.log(err);
       res.status(500).send('Something wrong!');
    }
    else {
       console.log(setField);
       res.json(results)
    }
  })
})

Du kan se här några mongodb-arrayoperatorer.

Hoppas det hjälper.




  1. MongoDB $weeklyUpdate #66 (22 april 2022):Hackathons, mongosh och Github

  2. Kan inte komma åt mongodb via webbläsaren - Det ser ut som att du försöker komma åt MongoDB över HTTP på den inbyggda drivrutinsporten

  3. Finns det något sätt att begränsa antalet poster i en viss samling

  4. Använder wait.for med nodejs och mongoskin för att undvika callback helvetet