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 بشكل جيد في الوقت الحالي ، ولكن يفضل استخدام الصيغة الأخرى. :)
بالطبع يجب أيضًا تطبيق هذا الإصلاح على الأساليب الموجودة في المستندات الثانوية
ماذا لو كان المؤلف مصفوفة؟ هل يمكننا عمل افتراضي على كل من هذه المصفوفة؟
+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
});
التعليق الأكثر فائدة
يعمل الحل أعلاه ، ولكنك ستحتاج أيضًا إلى تعيين الظاهرية للمخطط المتداخل: