Почему мои мошенники и установщики схемы Mongoose 3.8.7 игнорируются?
Во время работы с Node.js, Mongoose и MongoDB, я обнаружил, что мои мошенники и сеттеры схемы Mongoose не срабатывают при выполнении запроса findOne.
Я нашел старый поток, который говорит о наличии проблемы с getters и seters в версии 2.x, но он утверждает, что с тех пор он был разрешен, и я использую самую последнюю версию Mongoose (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);
});
Он отвечает значением имени пользователя, которое не имеет "тестового" пост-исправления. Я здесь что-то не так? Любая помощь будет принята с благодарностью!
Дополнительная информация
Это результат поиска:
{
"username": "Radius"
}
Это значение schema.paths.username.getters после применения одного из двух способов, описанных выше:
[ [Function: testGetter] ]
Ответы
Ответ 1
У меня была та же проблема, что и геттеры, не изменяя возвращаемые документы при запросе с помощью Mongoose. Чтобы это применимо к каждому запросу, вы можете сделать это:
// Enable Mongoose getter functions
schema.set('toObject', { getters: true });
schema.set('toJSON', { getters: true });
Ответ 2
Предполагаете ли вы, что виртуальные машины не работают, потому что они не отображаются в вашем файле console.log? Если это так, то по дизайну. Виртуальные файлы являются внешними по отношению к вашему фактическому документу, поэтому не печатайте с помощью console.log по умолчанию. Чтобы отобразить их, прочитайте эти документы: http://mongoosejs.com/docs/api.html#document_Document-toObject
Ответ 3
Try
schema.virtual('password').get(function () {
return this.username;
});
в качестве вашей функции getter, this
- это ваш экземпляр вашего объекта, а параметр value
здесь не означает значительного значения.
Если вы пишете функцию setter, вам нужно написать this.username = value
.