2017-10-12 4 views
0

Je suis capable de mettre à jour un tableau dans un document en utilisant $ addToSet, mais je veux mettre à jour un tableau qui se trouve dans un tableau de documents.MONGODB: mise à jour d'un tableau imbriqué dans un sous-document

Mon schéma:

const mySchema1 = new Schema({ 
    myId : {type:String, unique:true}, 
    name : String, 
    entries : [{ 
     value : String, 
     keywords:[String] 
    }] 
}); 

routes.js

app.put('/api/entity',function(req,res){ 
    let model = new Entity(); 
    console.log(req.body); 
    model.collection.update({"myId":req.body.myId,"entries":req.body.entries},{$addToSet:{"entries":{$each:[req.body.entries]}}},function(err,entries){ 
     if(err){ 
      res.send(err); 
     }else{ 
      res.send(entries); 
     } 
    }) 
}); 

Maintenant, je veux mettre à jour (si elle existe)/insert (si n'existent pas), 1. Valeur 2. mots-clés d'une valeur particulière

Merci d'avance !!!

+0

https://stackoverflow.com/questions/23470658/mongodb-upsert-sub-document Cela peut être lié à votre question – Sridhar

Répondre

0
var entries = req.body.entries; 
// match ALL of the documents whose `entires` attribute contains ALL `req.body.entries` 
var query = {"myId":req.body.myId, "entries": {$all: entries}}; 

// match SOME of the documents whose `entires` attribute contains SOME `req.body.entries` 
// var query = {"myId":req.body.myId, "entries": {$some: entries}}; 

// ADD all `req.body.entries` to the matched documents 
var update = {$addToSet:{"entries":{$each:[entries]}}; 

// Create a new matching document if one doesn't already exeist 
var options = {upsert = 1}; 


app.put('/api/entity',function(req,res){ 
    let model = new Entity(); 

    console.log(req.body); 

    model.collection.update(
     query, 
     update, 
     options 
    },function(err,entries){ 
     if(err){ 
      res.send(err); 
     }else{ 
      res.send(entries); 
     } 
    }) 
}); 

Par ailleurs, vous pouvez interroger votre Entity db en utilisant une syntaxe plus simple. Entity.update()