MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Актуализиране на запис с mongoose

Можете да използвате &elementMatch за да намерите желания сезон в масива, а в обекта setField можете да използвате позиционния $ оператор, който идентифицира съвпадащия елемент в заявката.

Проблемът е, че ако не намери нито един сезон, който да съответства на season_number , документът няма да бъде актуализиран. В този случай можете да зададете друга заявка за актуализиране, за да добавите този сезон в seasons масив.

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

Можете да видите тук някои оператори за масив mongodb.

Надявам се да помогне.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Поведение на require в node.js

  2. Не може да се свърже с mongoDB, работещ в докер контейнер

  3. Node Mongo Native – как да разберете кога курсорът е изчерпан?

  4. MongoDB изброява бази данни с даден префикс в Go

  5. Java MongoDB запазва множество документи наведнъж