【问题标题】:To Find the average of a particular type in MongooseJs在 MongooseJs 中查找特定类型的平均值
【发布时间】:2012-10-25 11:04:15
【问题描述】:

我有一个 MongoDB 集合“标记”,如下所示

 _id   Student_id   Subject  Mark
   1    111          AAA      9
   2    111          BBB      5
   3    111          CCC      7
   4    222          AAA      10
   5    222          CCC      6
   6    222          BBB      8

我需要使用 MONGOOSEJS 找到 student_id=111 在 3 个科目中的平均分。我有一个解决方案

var Mark = mongoose.model('mark', new Schema({
  Student_id: Number,
  Subject: String,
  Mark: Number
}));

Mark.aggregate([
    { $group: {
        _id: '$Student_id',
        markAvg: { $avg: '$Mark'}
    }}
], function (err, results) {
    if (err) {
        console.error(err);
    } else {
        console.log(results);
    }
}
);

输出是

    [ { _id: 222, markAvg: 8 }, { _id: 111, markAvg: 7 } ]

当我将 student_id:111 作为参数传递时,我只想要 {_id:111,markAvg:7}。 请任何人提出答案。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您需要在管道顶部添加一个$match 元素,以将集合的文档过滤为您想要作为$group 输入的文档:

    Mark.aggregate([
        { $match: { Student_id: 111 } },
        { $group: {
            _id: '$Student_id',
            markAvg: { $avg: '$Mark'}
        }}
    ], function (err, results) {
        if (err) {
            console.error(err);
        } else {
            console.log(results);
        }
    });
    

    【讨论】:

    • 它正在工作。我的输出是 {"_id":"111","markAvg":3.5}。我将代码中的 _id: '$Student_id' 更改为 Student_id 更改输出变量名,但导致错误。有什么方法可以将 o/p 显示变量从 '_id' 更改为 'Student_id'?即 {"Student_id":"111","markAvg":3.5}
    • @dany 在管道末尾添加$project 操作以执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多