$ max聚合未显示我想要的输出

时间:2017-01-24 09:20:27

标签: node.js mongodb aggregation-framework

这是$max的更新版本。我已经试过你的这段代码。

db.contact.aggregate([
   {$sort: {machine_Id: 1, date:1}},
   {$group:{
      _id: '$machine_Id',
      max_air_Temp: {$max:"$air_Temp"}
     }
   }
  ], function(err, meibanlist) {
      if (err || !meibanlist ) console.log("Record not found");
      else meibanlist.forEach (function(machine_Id){
          console.log(machine_Id);
      })
});

但是当我在mongodb中运行时,它给了我:

{ _id: 5, max_air_Temp: 819 }
{ _id: 857, max_air_Temp: 121 }
{ _id: 52, max_air_Temp: 146 }
{ _id: 67, max_air_Temp: 300 }
{ _id: 655, max_air_Temp: 84 }
{ _id: 15, max_air_Temp: 844 }
{ _id: 363, max_air_Temp: 861 }
{ _id: 717, max_air_Temp: 623 }
{ _id: 189, max_air_Temp: 639 }
{ _id: 346, max_air_Temp: 563 }
{ _id: 470, max_air_Temp: 804 }
{ _id: 917, max_air_Temp: 697 }
{ _id: 167, max_air_Temp: 438 }
{ _id: 4, max_air_Temp: 467 }

但是当我尝试这段代码时:

db.contact.aggregate([{$group: {_id: "machine_Id", max: {$max: "$air_Temp"}}}], 
  function(err, meibanlist) {
    if (err || !meibanlist) console.log("Record not found");
    else meibanlist.forEach (function(machine_Id){
      console.log(machine_Id);
    })
  });

它向我展示了这个输出:这个输出更像我想要的,因为它只显示了一个输出,但我希望'machine_id'显示确切的id而不是单词machine_id。你知道如何编辑这个集吗?

输出:

{ _id: 'machine_Id', max: 997 }

2 个答案:

答案 0 :(得分:0)

在汇总查询中使用_id: '$machine_Id'代替_id: 'machine_Id'

db.contact.aggregate([
   {$sort: {machine_Id: 1, date:1}},
   {$group:{
      _id: '$machine_Id',
      max_air_Temp: {$max:"$air_Temp"}
     }
   }
  ], function(err, meibanlist) {
      if (err || !meibanlist ) console.log("Record not found");
      else meibanlist.forEach (function(machine_Id){
          console.log(machine_Id);
      })
});

更新:根据您的新要求,您可能只需要一个air_Temp值最大且machine_id_id的输出为db.contact.aggregate([ {$sort: {air_Temp: -1}}, {$limit:1}, {$project:{_id:"$machine_Id",max_air_Temp:"$air_Temp" }} ], function(err, meibanlist) { if (err || !meibanlist ) console.log("Record not found"); else meibanlist.forEach (function(machine_Id){ console.log(machine_Id); }) });

所以可以试试

lastIndexOf(',')

答案 1 :(得分:0)

查看documentation中的示例。

替换

_id: 'machine_Id',

_id: '$machine_Id',