Mongoose: Unterstützung für verschachtelte virtuelle Dateien, virtuelle Dateien in Unterdokumenten

Erstellt am 12. Feb. 2011  ·  6Kommentare  ·  Quelle: Automattic/mongoose

var Page = new Schema({
    author: {
        first_name: String
      , last_name: String
    }
});
Page.virtual("author.full_name").get(function() {
    return this.author.first_name + " " + this.author.last_name;
});

// Later
myPage = new Page({author: {first_name: "John", last_name: "Doe"}});
myPage.author.full_name; // == undefined
myPage.get("author.full_name"); // == "John Doe"

Ich habe nicht versucht, ein neues Schema für den Autor mit seinen eigenen Virtuals zu erstellen. Vielleicht würde das funktionieren, aber nach anderen Problemberichten funktionieren Unterschemata optimal in Arrays atm, nicht als einfache Unterdokumente.

Wenn man sich die Quelle ansieht, scheint dies nicht unmöglich zu sein, es fehlt nur eine clevere Aufteilungslogik ("."), während das virtuelle zum Schemabaum hinzugefügt wird.

Die get-Methode funktioniert vorerst gut, aber die andere Syntax wäre vorzuziehen. :)

Hilfreichster Kommentar

Die obige Lösung funktioniert, aber Sie müssen auch Virtuals für das verschachtelte Schema aktivieren:

Variation.set('toJSON', {
    virtuals: true
});

Alle 6 Kommentare

Natürlich sollte dieser Fix auch auf Methoden auf Filialdokumenten angewendet werden

Was ist, wenn der Autor ein Array ist? können wir auf jedem dieser Arrays eine virtuelle machen?

+1 Unterstützung für Arrays

+100 Unterstützung für Arrays

Habe es herausgefunden:.

var Variation = new Schema({
  label: {
    type: String
  }
});

// Virtual must be defined before the subschema is assigned to parent schema
Variation.virtual("name").get(function() {

  // Parent is accessible
  var parent = this.parent();
  return parent.title + ' ' + this.label;
});


var Product = new Schema({
  title: {
    type: String
  }

  variations: {
    type: [Variation]
  }
});

Die obige Lösung funktioniert, aber Sie müssen auch Virtuals für das verschachtelte Schema aktivieren:

Variation.set('toJSON', {
    virtuals: true
});
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen