2013-03-14 9 views
6

Wenn ich ein Schema in Mongoose, die wie definiert ist:Können Sie eine Instanzmethode für Unterdokumente in Mongoose definieren?

var subSchema = new Schema({ 
    some: String 
}); 

var topSchema = new Schema({ 
    subs: [subSchema] 
}); 

var topModel = mongoose.model("Top", topSchema); 

Ist es möglich, eine Instanz Methode für das Teildokument zu definieren? Ich habe Folgendes versucht (vor der Deklaration des Modells hinzugefügt), aber es funktioniert nicht:

subSchema.methods.someFn = function() { 
    return 'blah'; 
}; 
+0

Können Sie auf "es funktioniert nicht" erweitern? – JohnnyHK

+0

Eigentlich habe ich herausgefunden, was ich tun wollte, funktioniert nicht, aber was ich tat tatsächlich gearbeitet. Was ich wollte, war eine Funktion, die ich für die Sammlung der Subdocs verwenden kann, d. H. 'Topdocs.someFn()', aber was ich tatsächlich deklarierte, ist 'topdocs [i] .someFn() '. – wciu

+1

Ah, gut zu hören, dass es funktioniert hat. – JohnnyHK

Antwort

3

Beantworten Sie meine eigene Frage.

Was ursprünglich wollte ich eine Funktion tun war, zu schaffen, die auf der Sammlung von Subdocs verwendet werden können, wie in:

topdoc.subs.someFn(); 

Doch was ich habe tatsächlich mit dem Code in der ursprünglichen Frage war ein erstellen Funktion für einen Subdoc selbst, wie in:

topdoc.subs[i].someFn(); 

Dies funktioniert.

Soweit ich sagen kann, wird das Erstellen einer Funktion für die Sammlung von Subdocs von Mongoose nicht unterstützt.

Ich habe das verstanden, indem ich eine Methode in topSchema definiert habe, die tun würde, was ich will.

+0

Zwei Jahre später möchte ich eine Subdoc-Instanzmethode erstellen, die das Subdoc aktualisiert. Weißt du, ob das möglich ist? 'this.save()' scheint nicht zu funktionieren. Siehe: http://StackOverflow.com/Questions/29998323 – Antrikshy

+0

Subdocs können nicht gespeichert werden, Sie müssen das übergeordnete Element speichern. This.parent(). Save() sollte funktionieren, aber Sie müssen es testen. – wciu

+0

Ich habe seit dem Refaktorieren, aber jetzt werde ich das versuchen. Wenn es funktioniert, lasse ich es Sie wissen und Sie können es als Antwort posten. Sieht vielversprechend aus. Vielen Dank! – Antrikshy

Verwandte Themen