1

別のモデルの値の合計から派生した (ユーザー モデルの) ユーザー設定が必要です。

私がやろうとしたことは、次のようなクエリを使用して仮想値を作成することです:

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){

    });
})

何か案は?再度、感謝します

4

1 に答える 1