2016-12-04 5 views
2

Also momentan kämpfe ich um die richtigen Ergebnisse aus meiner Abfrage zu bekommen. Hier ist, wie es aussieht:

db.pitching.aggregate([ 
    { $match: {} }, 
    { $group: { 
     _id: "$playerid", 
     maxIpouts: { $max: "$ipouts" } 
    }} 
]) 

Ich weiß, dass ich verwenden $match die richtigen Ergebnisse zu erhalten. Ich möchte einen einzigen Spieler hat die höchste ($max) ipouts, aber ich bin nicht sicher, wie man das mit $match filtern.

Ohne $match es gibt mir die player_id und jeder ipout für den Spieler nicht einen einzigen Spieler-ID mit der höchsten ipout hat.

Antwort

0

Sie brauchen keine Aggregation dafür. Sie können sort mit Cursor Sammlung find verwenden, um den Spieler-ID übereinstimmen, die Ergebnisse zu verarbeiten, indem limit von Cursor gefolgt absteigend erster Reihe zu bekommen.

Sie können einen Player mit max iouts über die Sammlungen hinweg erhalten, wenn Sie den Filter entfernen.

db.pitching.find().sort({ "ipouts": -1 }).limit(1) 
0

Sie einen für diese $match Pipeline nicht benötigen, brauchen Sie nur die folgenden Pipeline Schritte, um Ihre aktuelle Abfrage anhängen (minus der $match), um das gewünschte Ergebnis zu erhalten.

$sort - Wie Sie die Ergebnisse der vorherigen $group Pipeline erhalten, würden Sie die Dokumente, die von der maxIpouts Feld bestellen müssen, damit Sie die Dokumente mit den meisten ipouts bestellt bekommen.

$limit - Damit erhalten Sie das oberste Dokument.

nun die oben Zusammenbauen sollten Sie die folgende Pipeline führen Sie das gewünschte Ergebnis zu erhalten:

db.pitching.aggregate([ 
    { 
     "$group": { 
      "_id": "$playerid", 
      "maxIpouts": { "$max": "ipouts" } 
     } 
    }, 
    { "$sort": { "maxIpouts": -1 } }, 
    { "$limit": 1 } 
]) 
Verwandte Themen