2012-05-10 16 views
6

Jestem nowy w Mongoose/nodejs i zmagam się z prostą aktualizacją tablicy w tablicy.Jak zaktualizować mangustę?

Oto schemat:

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"}, 
}); 

A oto kod Aktualizacja Próbowałem:

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

Podczas tego błędu ERR mówi „Nie można dołączyć do tablicy za pomocą nazwa pola ciągów 'counties' ". Co to znaczy? Co ja robię źle?

Odpowiedz

1

Należy zdefiniować obiekt podrzędny jako inny schemat, a nie tylko jako listę niektórych anonimowych obiektów. (Reference.)

Spróbuj zdefiniować Country jako osobny schemat, zagnieżdż w Continent, a następnie wykonaj aktualizację.

+0

Ok. Czy nie ma alternatywnego sposobu aktualizowania zagnieżdżonej tablicy bez konieczności ponownego definiowania schematu? – tremolo

+0

@tremolo: może, ale nie musi (moja Mongoose-fu jest wciąż słaba), ale uważam, że dobrą praktyką jest definiowanie schematu "Kraju". – Ashe

+0

@tremolo: czy mógłbyś zaktualizować swoje pytanie nowym kodem? – Ashe