MongoDB
PHP Manual

MongoDB::command

(PECL mongo >=0.9.2)

MongoDB::commandEjecuta un comando de base de datos

Descripción

public array MongoDB::command ( array $command [, array $options = array() ] )

Prácticamente todo lo que no son operaciones CRUD se puede realizar con un comando de base de datos. ¿Necesita conocer la versión de la base de datos? Hay un comando para ello. ¿Necesita hacer una agregación? Hay un comando para ello. ¿Necesia habilitar registros de mensajes? Se puede hacer una idea.

Este método es equivalente a:

<?php

public function command($data) {
    return 
$this->selectCollection('$cmd')->findOne($data);
}

?>

Parámetros

command

Consulta que se enviará.

options

Este parámetro es un array asociativo de la forma array("nombre_opción" => <boolean>, ...). Actualmente las opciones soportadas son:

  • "timeout"

    Entero, su valor predeterminado es MongoCursor::$timeout. Si se establece a "safe", establece cuánto espera el cliente (en milisegundos) a un respuesta de la base de datos. Si la base de datos no responde dentro del periodo del tiempo de espera, será lanzada una MongoCursorTimeoutException.

Historial de cambios

Versión Descripción
1.2.0 Añadido el parámetro options con una única opción: timeout.

Valores devueltos

Devuelve la respuesta de la base de datos.

Ejemplos

Ejemplo #1 Ejemplo de MongoDB::command() con "distinct"

Localizando todos los valores distintos de una clave.

<?php

$personas 
$db->personas;

$personas->insert(array("nombre" => "Joe""edad" => 4));
$personas->insert(array("nombre" => "Sally""edad" => 22));
$personas->insert(array("nombre" => "Dave""edad" => 22));
$personas->insert(array("nombre" => "Molly""edad" => 87));

$edades $db->command(array("distinct" => "personas""key" => "edad"));

foreach (
$edades['values'] as $edad) {
    echo 
"$edad\n";
}

?>

El resultado del ejemplo sería algo similar a:


4
22
87

Ejemplo #2 Ejemplo de MongoDB::command() con "distinct"

Buscar todos los valores distintos de una clave, donde el valor es mayor o igual a 18.

<?php

$personas
$db->personas;

$personas->insert(array("nombre" => "Joe""edad" => 4));
$personas->insert(array("nombre" => "Sally""edad" => 22));
$personas->insert(array("nombre" => "Dave""edad" => 22));
$personas->insert(array("nombre" => "Molly""edad" => 87));

$edades $db->command(
    array(
        
"distinct" => "personas",
        
"key" => "edad",
        
"query" => array("edad" => array('$gte' => 18))
    )
);  

foreach (
$edades['values'] as $edad) {
    echo 
"$edad\n";
}

?>

El resultado del ejemplo sería algo similar a:


22
87

Ejemplo #3 Ejemplo de MongoDB::command() con MapReduce

Obtener todos los usuarios con al menos un evento "sale" (venta), y cuántas veces han tenido ventas cada uno de esos usuarios.

<?php

// documento de eventos de ejemplo
$events->insert(array("user_id" => $id
    
"type" => $type
    
"time" => new MongoDate(), 
    
"desc" => $description));

// construcción del mapa y función reductora
$map = new MongoCode("function() { emit(this.user_id,1); }");
$reduce = new MongoCode("function(k, vals) { ".
    
"var sum = 0;".
    
"for (var i in vals) {".
        
"sum += vals[i];"
    
"}".
    
"return sum; }");

$sales $db->command(array(
    
"mapreduce" => "events"
    
"map" => $map,
    
"reduce" => $reduce,
    
"query" => array("type" => "sale"),
    
"out" => array("merge" => "eventCounts")));

$users $db->selectCollection($sales['result'])->find();

foreach (
$users as $user) {
    echo 
"Usuario {$user['_id']} tuvo {$user['value']} venta(s).\n";
}

?>

El resultado del ejemplo sería algo similar a:


Usuario 47cc67093475061e3d9536d2 tuvo 3 venta(s).
Usuario 49902cde5162504500b45c2c tuvo 14 venta(s).
Usuario 4af467e4fd543cce7b0ea8e2 tuvo 1 venta(s).

Nota: Usando MongoCode

Este ejemplo utiliza MongoCode, que puede utilizar también un argumento de ámbito. Sin embargo, por el momento, MongoDB no soporta el uso de ámbitos en MapReduce. Si deseara utilizar variables en el lado de cliente con las funciones MapReduce, puede añairlas al ámbito global usando el campo opcional de ámbito con el comando de la base de datos. Consulte la » documentación de MapReduce para más información.

Nota: El argumento out

Antes de 1.8.0, el argumento out era opcional. Si no se iba a usar, los resultados de MapReduce se escribían a una colección temporal, que se eliminaba cuando se cerrara la conexión. A partir de la versión 1.8.0, el argumento out es obligatorio. Consulte la » documentación de MapReduce para más información.

Si va a usar MapReduce, Prajwal Tuldhar ha creado una API para usuarios de Mongo PHP que ofrece una interfaz más elegante que el comando 'al desnudo'. Puede descarlo desde » Github y hay un » artículo de blog sobre cómo usarlo.

Ver también

Documentación de MongoDB sobre » comandos de base de datos y comando individuales: » findAndModify, » getLastError, y » repair (existen muchos más, éstos son sólo unos pocos ejemplos).


MongoDB
PHP Manual