Подтвердить что ты не робот

Невозможно заставить виртуальные машины 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}). Правильно ли я делаю это?

4b9b3361

Ответ 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

Моя ошибка не включала необходимые поля в запрос. Если они не выбраны в проекции, то мангуст не знает, как объединить/вычислить виртуальное поле.