2016-04-23 10 views
1

Ich habe eine Ereignissammlung. Ich möchte Benutzer, die keinen Ereignisklick ausgeführt haben. Beispiel -MongoDB-Gruppe von Benutzern, die kein Ereignis durchgeführt haben x

collection - 
{ 
    'event' : 'open' 
    'user' : 1 
}, 
{ 
    'event' : 'open' 
    'user' : 2 
}, 
{ 
    'event' : 'click' 
    'user' : 2 
} 

ich führen möchte, wie folgend:

{ 'user' : 1 } 

Was ich erhalte ist:

{ 'user' : 1 }, 
{ 'user' : 2 } 

Mein Code:

$collection->aggregate(array(
    array('$match' => array('$event' => array('$not' => 'click'))), 
    array('$group' => 
       array(
       '_id' => '$user' 
      ), 
    ) 
)) 

Antwort

0

ich sollte erste Gruppe das Dokument s und filtern Sie dann den Benutzer, der nicht geklickt hat, und projizieren Sie das Ergebnis dann in Ihr bevorzugtes Format.

$collection->aggregate(array(
array('$group' => 
       array(
       '_id' => '$user','events' => array('$push'=>'event') 
      ), 
    array('$match' => array('$events' => array('$not' => 'click'))), 
     array('$project' => array('user' => '$user')), 

)) 
+0

Danke. Ich habe verstanden. Es ist nur um die Reihenfolge. Wir gruppieren zuerst die Daten und wenden dann die Bedingungen für diese gruppierten Daten an. –

Verwandte Themen