Mongoose: دعم الظاهرية المتداخلة والظاهرية في المستندات الثانوية

تم إنشاؤها على ١٢ فبراير ٢٠١١  ·  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"

لم أحاول إنشاء مخطط جديد للمؤلف باستخدام الظاهرية الخاصة به. ربما ينجح ذلك ، ولكن وفقًا لتقارير المشكلات الأخرى ، تعمل المخططات الفرعية على النحو الأمثل في أجهزة الصراف الآلي ، وليس كمستندات ثانوية عادية.

بالنظر إلى المصدر ، لا يبدو هذا مستحيلًا ، فقط فقد بعض منطق التقسيم الذكي (".") أثناء إضافة الظاهري إلى شجرة المخطط.

تعمل طريقة 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 التقييمات