Ich versuche, eine durchschnittliche Berechnung über ein Mongo-Dataset mit MongoCollection()::aggregate()
zu implementieren, aber die Funktionen gibt ein Cursor-Objekt zurück und ich kann nicht herausfinden, was ich falsch mache.PHP MongoDB Aggregation gibt leer
Dies ist eine Probe des Datensatzes Inhalt:
{ word : "word", time : 1234, result : "pass" }
Diese Pipeline-Abfrage in der Mongo-Konsole funktioniert:
{"$group" :
{"_id" : "$result",
"meanTime" : {"$avg" :"$time"}
}
}
Dies ist mein Code:
public function getTimes($fields = array('correct','wrong','pass')){
$group = ['$group'=> ["_id" => '$result', "meanTime" => ['$avg' =>'$time']]];
$agg = $this->collection->aggregate(
[$group]
);
return $agg;
}
/*
//This is the var_dump on $agg
object(MongoDB\Driver\Cursor)#82 (2) {
["cursor"]=>
array(17) {
["stamp"]=>
int(0)
["is_command"]=>
bool(false)
["sent"]=>
bool(true)
["done"]=>
bool(false)
["end_of_event"]=>
bool(false)
["in_exhaust"]=>
bool(false)
["has_fields"]=>
bool(false)
["query"]=>
object(stdClass)#76 (0) {
}
["fields"]=>
object(stdClass)#74 (0) {
}
["read_preference"]=>
array(2) {
["mode"]=>
int(1)
["tags"]=>
array(0) {
}
}
["flags"]=>
int(0)
["skip"]=>
int(0)
["limit"]=>
int(0)
["count"]=>
int(2)
["batch_size"]=>
int(0)
["ns"]=>
string(23) "circular.intesavincente"
["current_doc"]=>
object(stdClass)#83 (2) {
["_id"]=>
string(4) "pass"
["meanTime"]=>
float(338)
}
}
["server_id"]=>
int(1)
}
//This is the json_encode output
{}
*/
ich versucht habe, Schreiben Sie das Pipeline-Array mit array()
konstruieren und vereinfacht []
, aber das Ergebnis ist unverändert. Was mache ich falsch? Danke
Ja, ich habe gerade festgestellt, dass das zurückgegebene Objekt ein Cursor anstelle eines Arrays war. Komische Sache ist, dass ich korrekt konvertiert habe, um ein ähnliches Objekt ein paar Zeilen über dieser Funktion anzuordnen. Ich denke, Ballmers Gipfel ist echt –