2016-05-18 11 views
0

Ich möchte eine Anfrage mit zwei $ Gruppe machen. Hier können Sie die Struktur meiner Daten sehen:

{ 
     "_id" : ObjectId("573495af4e998fec800041a7"), 
     "uniqid" : "not573495aeda725", 
     "status" : "waiting, 
     "date" : ISODate("2016-05-12T14:39:42.000+0000"), 
     "id_transaction" : null, 
     "hash_file" : null, 
     "user" : "Michel", 
     "desc" : "undefined", 
     "pharmacy" : "p56cdc980ba57f" 
    }, 
    { 
     "_id" : ObjectId("573495af4e998fec800041a7"), 
     "uniqid" : "not573495aeda725", 
     "status" : "waiting, 
     "date" : ISODate("2016-05-12T14:39:42.000+0000"), 
     "id_transaction" : null, 
     "hash_file" : null, 
     "user" : "Julien", 
     "desc" : "undefined", 
     "pharmacy" : "p72gdf210xs68t" 
    } 

Hier ist, wo ich in meinem Aggregat bin ab jetzt:

$pipeline = array(
        array(
         '$project' => array(
          'year' => array('$year' => array('$add' => array('$date',$offset))), 
          'month' => array('$month' => array('$add' => array('$date',$offset))), 
          'day' => array('$dayOfMonth' => array('$add' => array('$date',$offset))), 
          'hour' => array('$hour' => array('$add' => array('$date',$offset))), 
          "uniqid" => 1, 
          "status" => 1, 
          "date" => 1, 
          "pharmacy" => 1 
         ) 
        ), 
        array(
         '$match' => array(
          '$and' => array(
           array(
            "status" => array('$ne' => null) 
           ), 
           array(
            "status" => array('$ne' => "error") 
           ), 
           array(
            "date" => array('$lte' => new MongoDate(time())) 
           ), 
           array(
            "date" => array('$gt' => new MongoDate(strtotime($sixMonthAgo->format('Y-m-d')))) 
           ) 
          ) 
         ) 
        ), 
        array(
         '$group' => array(
          '_id' => array(
           "month" => array('$month' => '$date'), 
           "year" => array('$year' => '$date'), 
          ), 
          'count' => array('$sum' => 1) 
         ) 
        ), 
        array(
         '$group' => array(
          '_id' => array(

          ), 
          'count' => array('$sum' => 1) 
         ) 
        ) 
       ); 

Ich möchte die Anzahl an Zeilen haben, wo status = „Warte "Gruppierung meiner Anfrage nach" Jahr/Monat "und nach" Apotheke ".

Vielen Dank!

Antwort

0
   array(
        '$group' => array(
         '_id' => array(
          "month" => array('$month' => '$date'), 
          "year" => array('$year' => '$date'), 
          "status" 

         ), 
         'count' => array('$sum' => 1) 
        ) 
       ), 

dann statt Gruppierung - Verwendung Spiel _id.status = "Warten"

+0

Vielen Dank für Ihre Aufmerksamkeit! Meine Frage ist über Gruppierung nach Datum und Apotheke. Ich denke, mein Maych ist ok nein? – HugoMongo

+0

also - Sie haben eine leere Gruppenanweisung -> die mit $ match ersetzt werden könnte, um nur 'status =" waiting "' zu erhalten. Laut meiner Antwort konnten Sie sehen, dass ich dort das Feld "Status" hinzugefügt habe. – profesor79

+0

OKey tnx ich werde es wieder versuchen – HugoMongo

0

Sie brauchen keine $ Projekt ... sollte Mongo Abfrage sein -

[ 
    { 
    "$match": { 
     "status": "waiting", 
     "date": { 
     "$gt": { 
      "$date": "DATE_SIX_MONTH_AGO" 
     }, 
     "$lt": { 
      "$date": "CURRENT_DATE" 
     } 
     } 
    } 
    }, 
    { 
    "$group": { 
     "_id": { 
     "month": { 
      "$month": "$date" 
     }, 
     "year": { 
      "$year": "$date" 
     }, 
     "pharmacy": "$pharmacy" 
     }, 
     "count": { 
     "$sum": 1 
     } 
    } 
    } 
] 

In PHP sollte es sein -

$pipeline = array(
    array(
     '$match' => array(
      "status" => "waiting", 
      "date" => array(
       '$lte' => new MongoDate(time()), 
       '$gt' => new MongoDate(strtotime($sixMonthAgo->format('Y-m-d'))) 
       ) 
     ) 
    ), 
    array(
     '$group' => array(
      '_id' => array(
       "month" => array('$month' => '$date'), 
       "year" => array('$year' => '$date'), 
       "pharmacy" => '$pharmacy' 
      ), 
      'count' => array('$sum' => 1) 
     ) 
    ) 
); 

ich nicht in PHP testen haben, überprüfen und die Syntaxfehler, wenn eine korrigieren.

+0

netter spot über projekt - aber bitte ersetzen sie apotheke mit status um mit frage text – profesor79

+0

Es scheint zu arbeiten, wie ich will. – HugoMongo

+0

Tnx du wirklich! – HugoMongo