簡體   English   中英

Node js聚合和Findone概念

[英]Node js aggregation and findone concept

我需要找到person1交易的歷史..因此,在我的getHistory模塊中,我已經過濾了person1的 dealSchema中的所有交易,在acceptreject函數中,我使用了聚合概念來過濾在accepted字段中具有person1的 _d的交易。 但是回調函數acceptreject不會獲取總是導致[]的結果。任何人都請找出我在此代碼中所做的錯誤。

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

我在回調函數中犯了一個錯誤,該函數的userId參數未傳遞ID

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM