Почему мои геттеры и сеттеры схемы Mongoose 3.8.7 игнорируются?

при работе с узлом.js, Мангуст и MongoDB, я обнаружил, что мои геттеры и сеттеры схемы мангуста не срабатывают, когда я выполняю запрос findOne.

Я нашел старый поток, который предполагает, что была проблема с геттерами и сеттерами в версии 2.x, но в нем говорится, что с тех пор он был разрешен, и я использую самую последнюю версию Мангуста (3.8.7).

вот часть моей схемы

function testGetter(value) {
        return value + " test";
}

/**
* Schema
*/

var schema = new Schema({
        username: { type: String, required: true, unique: true, get: testGetter }
});

// I have also tried this.

schema.path('username').get(function (value, schemaType) {
        return value + " test";
});

вот как я выполнить запрос

Model
.findOne(conditions, fields, options)
.populate(population)
.exec(function (error, doc) {
        callback(doc, error);
});

Он отвечает значением имени пользователя, которому не хватает" test " post-fix. Я делаю что-то не так? Любая помощь будет очень признательна!

дополнительная информация

это результат поиска одного:

{
    "username": "Radius"
}

это значение schema.пути.имя пользователя:.геттеры после применения одного через один из двух способов, описанных выше:

[ [Function: testGetter] ]

3 ответов


У меня была такая же проблема с геттерами, не изменяющими возвращенные документы при запросе с Мангустом. Чтобы это применялось к каждому запросу, вы можете сделать следующее:

// Enable Mongoose getter functions
schema.set('toObject', { getters: true });
schema.set('toJSON', { getters: true });

ты считаешь, что виртуалы не работают, потому что они не отображаются в консоли.вывод журнала? Если так, то это сделано намеренно. Виртуалы являются внешними для вашего фактического документа, поэтому не печатаются с помощью консоли.войти по умолчанию. Чтобы получить их для отображения, прочитайте эти документы:http://mongoosejs.com/docs/api.html#document_Document-toObject


попробовать

schema.virtual('password').get(function () {
    return this.username;
});

как функции добытчика, this ваш экземпляр сущности и value параметр здесь ничего не значит.

если бы вы писали функцию сеттера, вам пришлось бы написать this.username = value.