2016-04-25 3 views
0

мне нужно найти историю person1 deals..so в моем getHistory модулы я отфильтрованы все сделки в том, что PERSON1 dealSchema игровой, в acceptreject функции я использовал понятие агрегации для фильтрации сделок, которые имеют person1's _d в принятом поле. Но функция обратного вызова acceptreject не получить результат всегда приводит к [] .. кто-нибудь пожалуйста, Findout ошибку я сделал в этом code..Thanks заранееNode агрегации и расслоение плотной findone концепции

var acceptreject = function (userId, callback){//callback function for finding accepted deal 
console.log("Aggregate:" +userId); 
if(userId == null && userId == 'undefined'){ 
console.log("error fetching id"); 
    res.send(new Response.respondWithData('failed','Invalid userId')); 
    return next(); 
    } 
User.aggregate([ 
{ 
    $unwind: "$deals" 
}, 
{ 
    "$match": 
    { 
    "deals.accepted": userId 
    //"deals.rejected": id 
    } 
    }, 
    { 
    $project:{ 
    "shopName":"$deals.shopName", 
    "deal":"$deals.deal", 
    "price":"$deals.price", 
    "name":"$name" 
    } 
} 
],function (err, user){ 
    console.log(user); 
    if (err){ 
    callback (err); 
    } 
    console.log("Your accepted deal:"+ user); 
// res.send(200,user); 
    callback(null, user); 
    }) 
} 
exports.getHistory = function (req, res, next) { 
    var incomingUser = req.user; 
    var id = incomingUser._id; 
    User.findById(id,function (err, user){ 
    console.log(user); 
    if (err) { 
    return next(new Response.respondWithData('failed','Cant find theuser')); 
    } 
    var dealObj = _.filter(user.deals); 
    acceptreject({ 
    userId : id 
    },function(err, users){ 
    if(err){ 
    res.send(new restify.InternaError(err.message)); 
    return next(); 
    } 
    else{ 
    console.log("final"); 
    var final = { 
     accepteddeal: users,//it returns [] in result but person1 accepted the deal 
     mydeal: dealObj 
    } 
    next(res.send(200, final)); 
    } 
    }); 
    }); 
    } 

И моя схема является

var dealSchema = new mongoose.Schema({ 
shopName: {type: String,required: true}, 
deal: {type: String,required: true}, 
price:{type: Number,required: true}, 
start:{type: Date,default: Date.now}, 
end:{type: Date}, 
expiry:{type: Date}, 
comments:{type: String}, 
accepted: {type:mongoose.Schema.Types.ObjectId, ref:'user'},//person1 _id 
rejected: {type:mongoose.Schema.Types.ObjectId, ref: 'user'} 
}); 
var userSchema = new mongoose.Schema({ 
name: { type: String,required: true}, 
phone: { type: Number, required: true,unique: true}, 
email:{type: String}, 
password: {type: String}, 
deals:[dealSchema] 
}, {collection: 'user'}); 
mongoose.model('Deal', dealSchema); 
mongoose.model('user', userSchema); 

ответ

0

Я совершил ошибку в функции обратного вызова, где параметр userId этой функции не прошел идентификатор

var accept= function (userId, callback){ 
console.log("Aggregate:" +userId); 
if(userId == null && userId == 'undefined'){ 
res.send(new Response.respondWithData('failed','Invalid userId')); 
return next(); 
} 
var id = new Object(userId); 
console.log(id); 

User.aggregate([ 
{ 
    $unwind: "$deals" 
}, 
{ 
    "$match": { 
    "deals.accepted" : id 
    } 
    }, 
{ 
    $project:{ 
    "shopName":"$deals.shopName", 
    "deal":"$deals.deal", 
    "price":"$deals.price", 
    "name":"$name" 
    } 
    } 
],function (err, user){ 
console.log(user); 
if (err){ 
    callback(err); 
} 
console.log("Your accepted deal:"+ user); 
    //res.send(200,user); 
    callback(null, user); 
}) 
} 
Смежные вопросы