Mongoose: ネストされた仮想、サブドキュメント内の仮想のサポート

作成日 2011年02月12日  ·  6コメント  ·  ソース: 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"

独自の仮想を使用して、作成者用の新しいスキーマを作成しようとしたことはありません。 それはうまくいくかもしれませんが、他の問題レポートによると、サブスキーマは単純なサブドキュメントとしてではなく、配列atmで最適に機能します。

ソースを見ると、これは不可能ではないように見えます。スキーマツリーに仮想を追加するときに、巧妙なsplit( "。")ロジックが欠落しているだけです。

getメソッドは当面は正常に機能しますが、他の構文を使用することをお勧めします。 :)

最も参考になるコメント

上記の解決策は機能しますが、ネストされたスキーマに対して仮想をオンに設定する必要もあります。

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

全てのコメント6件

もちろん、この修正はサブドキュメントのメソッドにも適用する必要があります

著者が配列の場合はどうなりますか? このアレイのそれぞれで仮想を実行できますか?

配列の+1サポート

配列の+100サポート

それを理解しました:。

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

上記の解決策は機能しますが、ネストされたスキーマに対して仮想をオンに設定する必要もあります。

Variation.set('toJSON', {
    virtuals: true
});
このページは役に立ちましたか?
0 / 5 - 0 評価