返回id

时间:2015-12-29 16:29:25

标签: node.js mongodb mongoose

我努力在我的猫鼬模型中编写一个只返回特定记录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);
    }
});

2 个答案:

答案 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);
});