MongoDB::commandEjecuta una orden de base de datos
&reftitle.description;
publicarrayMongoDB::commandarraycommandarrayoptionsarray()stringhash
Prácticamente todo lo que no son operaciones CRUD se puede realizar con una orden de
base de datos. ¿Necesita conocer la versión de la base de datos? Hay una orden para ello.
¿Necesita hacer una agregación? Hay una orden para ello. ¿Necesia habilitar la
identificación? Ha captado la idea.
Este método es idéntico a:
selectCollection('$cmd')->findOne($datos);
}
?>
]]>
&reftitle.parameters;
command
La Consulta a enviar.
options
Un array de opciones para la creación del índice. Actualmente las opciones
disponibles incluyen:
&mongo.writes.parameters.sockettimeoutms;
Las siguientes opciones están obsoletas y no deberían utilizarse más:
&mongo.writes.parameters.timeout;
hash
Establecer el hash de conexión del servidor que ejecutó la orden. Cuando
el resultado de la orden es apropiado para crear un
MongoCommandCursor, el objeto del hash es
pasarlo a MongoCommandCursor::createFromDocument.
El hash también se corresponderá con una conexión devuelta desde
MongoClient::getConnections.
&reftitle.changelog;
&Version;&Description;1.5.0
Se renombró la opción "timeout" a
"socketTimeoutMS". Emite un error
E_DEPRECATED al utilizar
"timeout".
Se añadió el parámetro por referencia hash.
1.2.0
Se añadió el parámetro options con una única opción:
timeout.
&reftitle.returnvalues;
Devuelve la respuesta de la base de datos. Cada respuesta de la base de datos siempre es como máximo
un documento, lo que significa que el resultado de una orden de base de datos nunca puede
exceder 16 MB. La estructura del documento resultante depende de la orden, pero
la mayoría de los resultados tendrán el campo ok para indicar éxito
o fracaso, y results, que contiene un array por cada
documento resultante.
&reftitle.examples;
Ejemplo de MongoDB::command con "distinct"
Buscar todos los valores distintos de una clave.
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 = $bd->command(array("distinct" => "personas", "key" => "edad"));
foreach ($edades['values'] as $edad) {
echo "$edad\n";
}
?>
]]>
&example.outputs.similar;
4
22
87
Ejemplo de MongoDB::command con "distinct"
Buscar todos los valores distintos de una clave, donde el valor es mayor
o igual a 18.
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 = $bd->command(
array(
"distinct" => "personas",
"key" => "edad",
"query" => array("edad" => array('$gte' => 18))
)
);
foreach ($edades['values'] as $edad) {
echo "$edad\n";
}
?>
]]>
&example.outputs.similar;
22
87
Ejemplo de MongoDB::command con MapReduce
Obtener todos los usuarios con al menos un evento de venta ("sale"), y cuántas veces
han realizado ventas cada uno de esos usuarios.
insert(array("user_id" => $id,
"type" => $tipo,
"time" => new MongoDate(),
"desc" => $descripción));
// construcción del mapa y función reductora
$mapa = new MongoCode("function() { emit(this.user_id,1); }");
$reductora = new MongoCode("function(k, vals) { ".
"var sum = 0;".
"for (var i in vals) {".
"sum += vals[i];".
"}".
"return sum; }");
$sales = $bd->command(array(
"mapreduce" => "events",
"map" => $mapa,
"reduce" => $reductora,
"query" => array("type" => "sale"),
"out" => array("merge" => "eventCounts")));
$usuarios = $bd->selectCollection($sales['result'])->find();
foreach ($usuarios as $usuario) {
echo "El usuario {$usuario['_id']} realizó {$usuario['value']} venta(s).\n";
}
?>
]]>
&example.outputs.similar;
El usuario 47cc67093475061e3d9536d2 realizó 3 venta(s).
El usuario 49902cde5162504500b45c2c realizó 14 venta(s).
El usuario 4af467e4fd543cce7b0ea8e2 realizó 1 venta(s).
Usando MongoCode
Este ejemplo utiliza MongoCode, que puede utilizar también un
argumento de ámbito. Sin embargo, por el momento, MongoDB no admite el uso de
ámbitos en MapReduce. Si fuera necesario usar variables en el lado del cliente con las
funciones MapReduce, puede añairlas al ámbito global usando el campo opcional de
ámbito con la orden de la base de datos. Consulte la
documentación de MapReduce
para más información.
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 cerraba 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.
Ejemplo de MongoDB::command con "geoNear"
Este ejemplo muestra cómo usar la orden geoNear.
demo;
$c = $d->poiConcat;
$r = $d->command(array(
'geoNear' => "poiConcat", // Buscar en la colección poiConcat
'near' => array(-0.08, 51.48), // Buscar cerca de 51.48°N, 0.08°E
'spherical' => true, // Habilitar la búsqueda esférica
'num' => 5, // 5 documentos devueltos como máximo
));
print_r($r);
?>
]]>
&reftitle.seealso;
MongoCollection::aggregateMongoCollection::findAndModifyMongoCollection::group
La documentación de MongoDB sobre
órdenes de base de datos
y las órdenes individuales:
findAndModify,
getLastError, y
repair (existen muchas más,
éstos son sólo unos pocos ejemplos).