Tengo un trabajo MongoDB agregado consulta que me puede ejecutar a través de la shell de MongoDB. Sin embargo, estoy tratando de convertir a trabajar con el oficial PHP Mongo conductor (http://php.net/manual/en/mongocollection.aggregate.php).

Aquí es el trabajo raw MongoDB consulta:

db.executions.aggregate( [  
   { $project : { day : { $dayOfYear : "$executed" } } },
   { $group : { _id : { day : "$day" }, n : { $sum : 1 } } } , 
   { $sort : { _id : -1 } } , 
   { $limit : 14 }
] )

Aquí está mi intento de (no de trabajo) en PHP utilizando el Mongo de controlador:

$result = $c->aggregate(array(
    '$project' => array(
        'day' => array('$dayOfYear' => '$executed')
    ),
    '$group' => array(
        '_id' => array('day' => '$day'),
        'n' => array('$sum' => 1)
    ),
    '$sort' => array(
        '_id' => 1
    ),
    '$limit' => 14
));

El error en el código PHP de arriba es:

{"errmsg":"exception: wrong type for field (pipeline) 3 != 4","code":13111,"ok":0}

Alguna idea? Gracias.

InformationsquelleAutor Justin | 2013-01-03

1 Comentario

  1. 16

    El parámetro en el Javascript es una matriz de 4 objetos con un elemento de cada uno, en el PHP es un array asociativo (objeto) con 4 elementos. Esto representaría su Javascript:

    $result = $c->aggregate(array(
        array(
          '$project' => array(
              'day' => array('$dayOfYear' => '$executed')
          ),
        ),
        array(
          '$group' => array(
              '_id' => array('day' => '$day'),
              'n' => array('$sum' => 1)
          ),
        ),
        array(
          '$sort' => array(
              '_id' => 1
          ),
        ),
        array(
          '$limit' => 14
        )
    ));

    Además, si usted tiene por lo menos PHP5.4, puede utilizar más simple sintaxis de array. La transformación de PHP entonces es trivial, basta con sustituir las llaves de cierre con corchetes y los dos puntos con flechas:

    $result = $c->aggregate([
      [ '$project' => [ 'day' => ['$dayOfYear' => '$executed']  ]  ],
      [ '$group' => ['_id' => ['day' => '$day'], 'n' => ['$sum' => 1]  ] ],
      [ '$sort' => ['_id' => 1] ],
      [ '$limit' => 14 ]
    ]);
    • Wow, muchas gracias. Necesita una pequeña modificación sum necesita ser $sum. Solo por curiosidad, ¿cómo fuiste capaz de látigo esto tan rápidamente?
    • Trabajó mucho con Mongo consultas en PHP recientemente y me encontré a mí mismo un poco. 😉
    • Es un poco desagradable la construcción de los agregados.
    • Cuando la traducción de la consola de PHP ayuda describiendo es como yo lo hice en la respuesta («una matriz de objetos con xyz ser una matriz de …»).

Dejar respuesta

Please enter your comment!
Please enter your name here