2012-05-10 18 views
6

Ich bin neu bei Mongoose/nodejs und ich kämpfe mit einem einfachen Update eines Arrays innerhalb eines Arrays.Wie in Mungo aktualisieren?

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

Und hier ist der Update-Code ich versucht habe:

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

Wenn dies zu tun, sagt der Fehler in err „anhängen Kann nicht an Array Zeichenfolge Feldname "Grafschaften" ". Was bedeutet das? Was mache ich falsch?

Antwort

1

Sie sollten das untergeordnete Objekt als ein anderes Schema definieren, nicht nur als Liste eines anonymen Objekts. (.)

Versuchen Sie Country als separates Schema zu definieren, verschachteln Sie das in Continent, dann aktualisieren Sie.

+0

Ok. Gibt es keine alternative Möglichkeit, das verschachtelte Array zu aktualisieren, ohne das Schema neu definieren zu müssen? – tremolo

+0

@tremolo: da kann oder darf nicht (meine Mungo-Fu ist immer noch schwach), aber ich denke, es ist eine gute Praxis, ein Schema für "Land" sowieso zu definieren. – Ashe

+0

@tremolo: Könnten Sie Ihre Frage mit dem neuen Code aktualisieren? – Ashe