MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Aktualizacja rekordu za pomocą mangusty

Możesz użyć &elementMatch aby znaleźć pożądany sezon w tablicy, a w obiekcie setField można użyć pozycyjnego $ operator, który identyfikuje element pasujący do zapytania.

Problem polega na tym, że jeśli nie znajdzie żadnego sezonu pasującego do season_number , dokument nie zostanie zaktualizowany. W takim przypadku możesz ustawić inne zapytanie aktualizacyjne, które zostanie dodane w tym sezonie w seasons tablica.

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)
    }
  })
})

Możesz zobaczyć tutaj niektóre operatory tablicowe mongodb.

Mam nadzieję, że to pomoże.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose usuwanie (wyciąganie) dokumentu w tablicy, nie działa z ObjectID

  2. Zbuduj reaktywną publikację z dodatkowymi polami w każdym dokumencie

  3. Jak przechowywać dane wyjściowe zapytania w temp db?

  4. NodeJS + Mongo - jak zdobyć zawartość kolekcji?

  5. Jak posortować kolekcję na podstawie wartości w tablicy?