2017-01-24 4 views
0

Dies ist die aktualisierte Version von $max. Ich habe diesen Code von dir ausprobiert.

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

, aber wenn ich das in mongodb lief, gab es mir:

{ _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 } 

Aber wenn ich diesen Code versucht:

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

es zeigte mir diese Ausgabe: Dieser Ausgang ist mehr ähnlich zu dem, was ich will, weil es mir nur einen Ausgang zeigt, aber ich würde wollen, dass die 'machine_id' die genaue ID anstelle des Wortes machine_id zeigt. Weißt du, wie man dieses Set bearbeitet?

Ausgang:

{ _id: 'machine_Id', max: 997 } 

Antwort

0

In Aggregatabfrage und verwenden _id: '$machine_Id' statt _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); 
     }) 
}); 

Update: nach Ihren neuen Anforderung Sie möchten nur einen Ausgang, dass air_Temp Wert maximal mit machine_id als _id.

kann es so versuchen

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

Wenn ich Ihren Code lief, gab es mir die Antwort (siehe oben). Was ich suchte, ist nur 1 Ausgabe anstelle von allen Aufzeichnungen, die ich habe. – Noobstudent

+0

überprüfen update Antwort @Noobstudent –

+0

immer noch die gleiche Ausgabe obwohl – Noobstudent

0

einen Blick auf die Beispiele in der documentation haben.

_id: 'machine_Id', 

Ersetzen mit

_id: '$machine_Id', 
+0

ive versuchte dies vorher, aber es gab mir die Ausgabe aller air_temp anstelle von nur 1 Ausgabe, die ich will – Noobstudent

Verwandte Themen