【发布时间】:2013-11-13 14:26:30
【问题描述】:
我想要一个用户设置(在用户模型中),它是从另一个模型中的值的总和派生的。
我试图做的是使用这样的查询创建一个虚拟值:
var schemaOptions = {
toObject: {
virtuals: true
}
,toJSON: {
virtuals: true
}
};
/**
* User Schema
*/
var UserSchema = new Schema({
firstname: String,
lastname: String,
email: String,
username: String,
provider: String,
phonenumber: Number,
country: String,
emailverificationcode: {type:String, default:'verifyme'},
phoneverificationcode: {type:Number, default:4321 },
emailverified: {type:Boolean, default:false},
phoneverified: {type:Boolean,default:false},
}, schemaOptions)
UserSchema
.virtual('credits')
.get(function(){
//Load Credits model
var Credit = mongoose.model('Credit');
Credit.aggregate([
{ $group: {
_id: '5274d0e5a84be03f42000002',
currentCredits: { $sum: '$amount'}
}}
], function (err, results) {
if (err) {
return 'N/A'
} else {
return results[0].currentCredits.toString();
//return '40';
}
}
);
})
现在,这获得了价值,但它无法正常工作(我无法检索虚拟“价值”信用)。我认为这是因为调用的异步性质。
有人可以提出正确的方法来实现这一点吗?
再次感谢您提供的任何意见。
编辑:
所以我正在尝试按照建议的方式进行操作,但到目前为止还没有运气。我无法调用我的“getCredits”方法。
这是我目前所拥有的:
UserSchema.method.getCredits = function(cb) {
//Load Credits model
var Credit = mongoose.model('Credit');
Credit.aggregate([
{ $group: {
_id: '5274d0e5a84be03f42000002',
currentCredits: { $sum: '$amount'}
}}
], function (err, results) {
cb(results);
}
);
};
var User = mongoose.model('User');
User.findOne({ _id : req.user._id })
.exec(function (err, tempuser) {
tempuser.getCredits(function(result){
});
})
有什么想法吗?再次感谢
【问题讨论】:
-
感谢 robertklep,我尝试了此处建议的解决方案,但无法使聚合函数正常工作。我会再试一次看看我犯了一个错误
-
我只是无法让我的 'getCredits' 方法起作用.. 叹息