2012-05-10 15 views
6

Sono nuovo su Mongoose/nodejs e sono alle prese con un semplice aggiornamento di un array all'interno di un array.Come aggiornare in mangusta?

Ecco lo schema:

var County = new Schema({ 
_id     : Schema.ObjectId, 
name    : String, 
biggestCity   : String 
}); 

var Country = new Schema({ 
_id     : Schema.ObjectId, 
name    : String, 
counties    : {type: [County], ref: "County"} 
}); 

var Continent = new Schema({ 
    _id  : Schema.ObjectId, 
    countries : {type: [Country], ref: "Country"}, 
}); 

Ed ecco il codice di aggiornamento che ho cercato:

var continents = mongoose.model("Continent"); 
var update = { "countries.counties.name": newName, "countries.counties.biggestCity": newBiggestCity }; 
var conditions = { "_id": countryId, "countries.name": countryName, "countries.counties.name": countyName }; 
var options = { multi: false }; 
wagers.update(conditions, update, options, function(err, numAffected) { 
    //callback code... 
}); 

Nel fare questo, l'errore nella err dice "Impossibile aggiungere a matrice utilizzando nome campo stringa "contee" ". Cosa significa questo? Che cosa sto facendo di sbagliato?

risposta

1

È necessario definire l'oggetto figlio come un altro schema, non solo come elenco di alcuni oggetti anonimi. (Reference.)

Provare a definire Country come schema separato, nidificare in Continent, quindi eseguire l'aggiornamento.

+0

Ok. Non c'è un modo alternativo per aggiornare l'array nidificato, senza dover ridefinire lo schema? – tremolo

+0

@tremolo: ci può o no (il mio Mongoose-fu è ancora debole), ma penso che sia comunque una buona idea definire uno schema per 'Paese '. – Ashe

+0

@tremolo: potresti aggiornare la tua domanda con il nuovo codice? – Ashe