2016-06-27 9 views
1

Ich versuche, die Größe eines Arrays namens "empofthemonth" zu verwenden, um jedes Feld zu sortieren, das von der Anzahl der Mitarbeiter des Monats zurückgegeben wird. HierSortieren von Dokumenten basierend auf Array-Feldgröße

ist der Einsatz Code:

$db->users->insert(
    ["firstname" => "firstname1", 
    "lastname" => "test", 
    "email" => "[email protected]", 
    "keyinfo" => 
     ["age" => 22, 
     "gender" => "Male", 
     "yearsemployed" => 1, 
     "empofthemonth" => ["Apr"]] 
    ]); 

$db->users->insert(
    ["firstname" => "firstname2", 
    "lastname" => "test2", 
    "email" => "[email protected]", 
    "keyinfo" => 
     ["age" => 24, 
     "gender" => "Female", 
     "yearsemployed" => 5, 
     "empofthemonth" => ["Feb", "Mar"]] 
    ]); 

$db->users->insert(
    ["firstname" => "firstname3", 
    "lastname" => "test2", 
    "email" => "[email protected]", 
    "keyinfo" => 
     ["age" => 31, 
     "gender" => "Female", 
     "yearsemployed" => 2, 
     "empofthemonth" => ["Jan", "May", "Jun"]] 
    ]); 

Ich weiß, dass aggregation könnte verwendet werden, aber ich kann nicht die vollständige Syntax trainieren.

die Abfrageergebnisse Zum Abschluss in dieser Reihenfolge sein sollte:

  1. firstname3 (3 emp der Monate)
  2. FIRSTNAME2 (2)
  3. Vorname1 (1)

Antwort

0

Wir müssen $project unsere Dokumente und die $size dann $sort jedes Dokument von dieser "Größe" in absteigender Reihenfolge zurückgeben. Beachten Sie, dass, um das Array-Feld zuzugreifen, müssen wir das "dot notation".

db.users.aggregate(
    [ 
     { "$project": { 
      "firstname": 1, 
      "lastname": 1, 
      "email": 1, 
      "keyinfo": 1, 
      "sz": { "$size": "$keyinfo.empofthemonth" } 
     }}, 
     { "$sort": { "sz": -1 } } 
    ] 
) 


Alles in PHP verwenden:

$db->users->aggregate(
    [ 
     [ "$project" => [ 
      "firstname" => 1, 
      "lastname" => 1, 
      "email" => 1, 
      "keyinfo" => 1, 
      "sz" => [ "$size" => "$keyinfo.empofthemonth" ] 
     ]], 
     [ "$sort" => [ "sz" => -1 ] ] 
    ] 
) 
+0

Danke für die Hilfe! –

Verwandte Themen