我努力在我的猫鼬模型中编写一个只返回特定记录ID的方法。
这是我的(简化)架构:
var PersonaSchema = new Schema({
email: { type: String, unique: true },
personal_firstname: String,
created_at: { type: Date },
updated_at: { type: Date }
});
我想通过电子邮件搜索记录,而不是返回id(如果存在)。目前我将此方法设置为静态方法,但不能正常工作。它不会返回id,而是返回整个猫鼬对象。
PersonaSchema.statics = {
getPersonaId: function getPersonaId(email, cb) {
this.findOne({ email: email }).select("_id").exec(function(err, persona) {
if(err) {
throw err;
} else {
if(persona){
return persona._id;
} else {
return;
}
}
});
}
}
非常感谢任何指针。
编辑:我的问题不太清楚。我想要做的是在我的控制器方法中将persona id作为单个值。下面我有一个现在正在运行的版本,带有回调版本。但是,我希望它没有回调。因此,我向静态函数发送电子邮件,该函数返回persona._id。如果没有回调,我该怎么做?
var personaId = Persona.addPersonaId(personaData, function(err, persona, data) {
if(err){
console.log(err)
} else {
console.log(data);
}
});
答案 0 :(得分:2)
使用回调而不是返回。
.exec(function(err, persona) {
if(err) {
return cb( err, persona );
}
cb( null, {id: persona._id} );
});
答案 1 :(得分:2)
你可以在模型中使用它:
PersonaSchema.statics = {
getPersonaId: function (email, cb) {
this.findOne({ email: email }).select('_id').exec(cb);
}
};
而在其他地方:
PersonaSchema.model.getPersonaId('test@test.com', function (err, persona) {
if (err) {
// handle error, express example:
return next(err);
}
// here you have
console.log(persona._id);
});