Почему мои геттеры и сеттеры схемы 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
.