Mongoose: Dukungan untuk virtual bersarang, virtual dalam subdokumen

Dibuat pada 12 Feb 2011  ·  6Komentar  ·  Sumber: 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"

Saya belum mencoba membuat skema baru untuk penulis dengan virtualnya sendiri. Mungkin itu akan berhasil, tetapi menurut laporan masalah lain, sub-skema bekerja secara optimal di atm array, bukan sebagai subdokumen biasa.

Melihat sumbernya, ini tidak terlihat mustahil, hanya melewatkan beberapa logika split(".") yang pintar sambil menambahkan virtual ke pohon skema.

Metode get berfungsi dengan baik untuk saat ini, tetapi sintaks lainnya akan lebih disukai. :)

Komentar yang paling membantu

Solusi di atas berfungsi, tetapi Anda juga harus mengaktifkan virtual untuk skema bersarang:

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

Semua 6 komentar

Tentu saja perbaikan ini juga harus diterapkan pada metode pada subdokumen

Bagaimana jika penulis adalah sebuah array? bisakah kita melakukan virtual pada masing-masing array ini?

+1 dukungan untuk array

+100 dukungan untuk array

Menemukannya :.

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

Solusi di atas berfungsi, tetapi Anda juga harus mengaktifkan virtual untuk skema bersarang:

Variation.set('toJSON', {
    virtuals: true
});
Apakah halaman ini membantu?
0 / 5 - 0 peringkat