Command of Mongo 2.4 Text Search feature.
<?php
$result = $db->command(
array(
'text' => 'bar', //this is the name of the collection where we are searching
'search' => 'hotel', //the string to search
'limit' => 5, //the number of results, by default is 1000
'project' => Array( //the fields to retrieve from db
'title' => 1
)
)
);
MongoDB::command
(PECL mongo >=0.9.2)
MongoDB::command — Ejecuta un comando de base de datos
Descripción
$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).
rename a collection:
<?php
$m = new Mongo();
$adminDB = $m->admin; //require admin priviledge
//rename collection 'colA' in db 'yourdbA' to collection 'colB' in another db 'yourdbB'
$res = $adminDB->command(array(
"renameCollection" => "yourdbA.colA",
"to" => "yourdbB.colB"
));
var_dump($res);
?>
> Need to know the database version? There's a command for that.
We didn't find it - ended up using either;
<?php
$m = new Mongo();
$adminDB = $m->admin; //require admin priviledge
$mongodb_info = $adminDB->command(array('buildinfo'=>true));
$mongodb_version = $mongodb_info['version'];
print_r($mongodb_info);
?>
or
<?php
$v = `mongo --version`;
print_r($v);
?>
I tried to write MapReduce. Unfortunately, out => array('replace' => 'collName') did not work for me. Instead, the below code works
<?php
$mongo->command(array(
'mapreduce' => 'events',
'map' => $map,
'reduce' => $reduce,
'out' => 'mapReduceEventStats'
));
?>
