別のモデルの値の合計から派生した (ユーザー モデルの) ユーザー設定が必要です。
私がやろうとしたことは、次のようなクエリを使用して仮想値を作成することです:
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){
});
})
何か案は?再度、感謝します