Невозможно заставить виртуальные машины Mongoose быть частью объекта результата
bI'm объявляю виртуальный, что я хочу появиться как часть результатов его запросов схемы, но он не отображается, когда я делаю console.log на объекте. Здесь схема:
var schema = new mongoose.Schema(
{
Name: { type: String }
},
{
toObject: { virtuals: true }
});
schema.virtual("Greet").get(function()
{
return "My name is " + this.Name;
});
Должен ли toObject не устанавливать виртуальный объект как свойство результатов любых запросов? Это не так, как и schema.set( "toObject", {virtuals: true}). Правильно ли я делаю это?
Ответы
Ответ 1
Поскольку вы используете JSON.stringify
в своем вызове console.log
, который вызывает метод toJSON
в экземпляре модели, а не toObject
.
Так что либо опустите JSON.stringify
в свой вызов:
console.log(results[0]);
Или установите параметр toJSON
в схеме, как будто вы в настоящее время устанавливаете параметр toObject
.
...
{
toObject: { virtuals: true },
toJSON: { virtuals: true }
});
Ответ 2
В итоге я сделал что-то действительно глупое. Я использовал Doc.find
вместо Doc.findOne
, и поэтому я пытался получить доступ к виртуальной части в массиве документов, а не в самом документе.
Ответ 3
Моя ошибка не включала необходимые поля в запрос. Если они не выбраны в проекции, то мангуст не знает, как объединить/вычислить виртуальное поле.