Об эффективности виртуальные функции немного менее эффективны, чем функции раннего связывания.
«Этот механизм виртуальных вызовов можно сделать почти таким же эффективным, как механизм« нормальной функции »(в пределах 25%). Его служебные данные пространства - это один указатель в каждом объекте класса с виртуальными функциями плюс один vtbl для каждого такого класса "[ Обзор C ++ by Bjarne Stroustrup]
Поскольку вы используете JSON.stringify
в своем вызове console.log
, который вызывает метод toJSON
в экземпляре модели, а не toObject
.
Поэтому либо опустите JSON.stringify
в ваш вызов:
console.log(results[0]);
Или установите параметр toJSON
в схеме, как будто вы в настоящее время устанавливаете параметр toObject
.
...
{
toObject: { virtuals: true },
toJSON: { virtuals: true }
});
В итоге я сделал что-то действительно глупое. Я использовал Doc.find
вместо Doc.findOne
, и поэтому я пытался получить доступ к виртуальному массиву документов, а не самому документу.