2016-08-07 36 views
1

我有一个场景,我的评级和回合数组名为ratings 我需要根据回合(1,2,3,4)以降序排列评级。 我使用快递JS和查询对mongodb中的字段数组进行排序

猫鼬司机

查询:

**//Get top ratings based on round 
exports.topRating = function(req, res) { 
    console.log(req.query); 
    Profiles.aggregate([{ 
      $match: { 
       "hiringManager": req.query.hiringManager, 
       "ratings.round":parseInt(req.query.round) 
      } 
     },{ $sort : { "ratings.rating" : -1 } }], 
     function(err, profiles) { 
      if (err) { 
       return handleError(res, err); 
      } 
      console.log(profiles); 
      return res.status(200).json(fnStruncturedData(profiles)); 

     }); 
}; 

模式:

var mongoose = require('mongoose'), 

     Schema = mongoose.Schema; 

    var ProfilesSchema = new Schema({ 
    name:String, 
    ratings: [{ 
      round: Number, 
      rating: Number, 
      feedback: String, 
      interviewer: String, 
      roundStatus: String 
     }] 
    }) 

假设我有存储在DB数据如下

[{ 
name:"a", 
ratings:[{ 
       round: 1, 
       rating: 3, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      }, 

{ 
       round: 2, 
       rating: 5, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      }, 
{ 
       round: 3, 
       rating: 4, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      },{ 
       round: 4, 
       rating: 1, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      }] 
}, 
{ 
name:"b", 
ratings:[{ 
       round: 1, 
       rating: 5, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      }, 

{ 
       round: 2, 
       rating: 4, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      }, 
{ 
       round: 3, 
       rating: 3, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      },{ 
       round: 4, 
       rating: 2, 
       feedback: "something", 
       interviewer: "abc", 
       roundStatus: "selected" 
      }] 
}] 

我在客户端选择轮次并相应地排在最前面评级将出现。 的说圆一个: 的数据进行排序,并根据查询我我首先得到name:b数据在阵列 第二轮: 我应该得到name:a第一阵列中的,但它再次显示第一 这里name:b数据I (2,3,4)没有变化 我不明白什么是错误的查询 请帮助

+0

添加样本数据和你会得到什么,什么是预期 –

+0

还不是那么清晰。将预期和当前结果添加为json。 –

+0

实际上它显示的是整体顶级评级而非圆明智 –

回答

0

问题是,你不感兴趣的回合的数据仍然是包括在内,并正在影响你的排序阶段。

如果与其他轮次中的数据并不需要返回,一个简单的办法就是放松$收视率第一,那么这将排除在$赛阶段,所有的非匹配轮。

例如,这应该工作:

[ 
{ 
    $unwind: "$ratings" 
}, 
{ 
    $match: { 
     "hiringManager": req.query.hiringManager, 
     "ratings.round":parseInt(req.query.round) 
    } 
}, 
{ 
    $sort: { 
     "ratings.rating" : -1 
    } 
} 
] 
相关问题