【问题标题】:sort the array of fields in mongodb对mongodb中的字段数组进行排序
【发布时间】:2016-08-07 22:09:43
【问题描述】:

我有一个场景,我在名为 ratings 的数组中有评级和回合 我需要根据轮数(1,2,3,4)按降序对评级进行排序。 我正在使用 express js 和 mongoose 驱动程序进行查询

查询:

   **//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:bdata 第二轮: 我应该首先在数组中获取name:a,但它再次首先显示name:b 数据 在这里我可以完美地对第 1 轮评分进行排序,而第 (2,3,4) 轮显示没有变化 我不明白查询中有什么问题 请帮忙

【问题讨论】:

  • 添加示例数据以及你得到什么和预期什么
  • 还是不太清楚。将预期结果和当前结果添加为 json。
  • 实际上它显示的是整体的最高评分,而不是圆形的

标签: node.js mongodb express mongoose aggregation-framework


【解决方案1】:

问题是您不感兴趣的轮次中的数据仍然包括在内,并且正在影响您的排序阶段。

如果不需要返回其他轮次的数据,一个简单的解决方案是先 $unwind rating,然后在 $match 阶段排除所有不匹配的轮次。

例如,这应该可以工作:

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

【讨论】:

    猜你喜欢
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2019-03-30
    相关资源
    最近更新 更多