Mongoose: Suporte para virtuais aninhados, virtuais em subdocumentos

Criado em 12 fev. 2011  ·  6Comentários  ·  Fonte: 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"

Não tentei fazer um novo esquema para o autor com seus próprios virtuais. Talvez funcionasse, mas de acordo com outros relatórios de problemas, os subesquemas funcionam perfeitamente em matrizes atm, não como subdocumentos simples.

Olhando para a fonte, isso não parece ser impossível, apenas faltando alguma lógica de divisão inteligente (".") Ao adicionar o virtual à árvore do esquema.

O método get funciona bem por enquanto, mas a outra sintaxe seria preferível. :)

Comentários muito úteis

A solução acima funciona, mas você também precisará ativar os virtuais para o esquema aninhado:

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

Todos 6 comentários

É claro que essa correção também deve ser aplicada a métodos em subdocumentos

E se autor for um array? podemos fazer um virtual em cada um deste array?

Suporte +1 para matrizes

+100 suporte para matrizes

Descobri isso

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

A solução acima funciona, mas você também precisará ativar os virtuais para o esquema aninhado:

Variation.set('toJSON', {
    virtuals: true
});
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

adamreisnz picture adamreisnz  ·  3Comentários

gustavomanolo picture gustavomanolo  ·  3Comentários

jeremyml picture jeremyml  ·  3Comentários

varunjayaraman picture varunjayaraman  ·  3Comentários

weisjohn picture weisjohn  ·  3Comentários