PHP 5.4.33 Released

MongoDB::command

(PECL mongo >=0.9.2)

MongoDB::commandExécute une commande de base de données

Description

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

Tout ce qui n'est pas une opération CRUD peut être effectué avec une commande de base de données. Besoin de connaitre la version de la base de données ? Il y a une commande pour cela. Besoin de faire une agrégation ? Il y a une commande pour cela. Besoin d'activer l'historisation ? Vous voyez l'idée ?

Cette méthode est équivalente à :

<?php

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

?>

Liste de paramètres

command

La requête à envoyer.

options

Ce paramètre est un tableau associatif sous la forme array("optionname" => <boolean>, ...). Actuellement, les options supportées sont :

  • "timeout"

    Alias obsolète pour "socketTimeoutMS".

Historique

Version Description
1.2.0 Ajout du paramètre options avec une seule option : "timeout".

Valeurs de retour

Retourne la réponse de la base de données. Toutes les réponses de la base de données sont composées d'au maximum un document, ce qui signifie que le résultat d'une commande de base de données ne peut jamais excéder les 16 Mo. La structure du document résultat dépend de la commande utilisée, mais la plupart des résultats auront le champ ok pour indiquer le succès ou l'échec de l'opération, et le champ results contenant un tableau de chaque document résultant.

Exemples

Exemple #1 Exemple avec MongoDB::command() et "distinct"

Trouver tous les valeurs distinctes pour une clé.

<?php

$people 
$db->people;

$people->insert(array("name" => "Joe""age" => 4));
$people->insert(array("name" => "Sally""age" => 22));
$people->insert(array("name" => "Dave""age" => 22));
$people->insert(array("name" => "Molly""age" => 87));

$ages $db->command(array("distinct" => "people""key" => "age"));

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

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :


4
22
87

Exemple #2 Exemple avec MongoDB::command() et "distinct"

Récupère toutes les valeurs distinctes pour une clé, pour laquelle la valeur est supérieure ou égale à 18.

<?php

$people 
$db->people;

$people->insert(array("name" => "Joe""age" => 4));
$people->insert(array("name" => "Sally""age" => 22));
$people->insert(array("name" => "Dave""age" => 22));
$people->insert(array("name" => "Molly""age" => 87));

$ages $db->command(
    array(
        
"distinct" => "people",
        
"key" => "age",
        
"query" => array("age" => array('$gte' => 18))
    )
);  

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

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :


22
87

Exemple #3 Exemple avec MongoDB::command() et MapReduce

Récupérer tous les utilisateurs avec au moins un événement "sale", et savoir le nombre de fois chacun de ces utilisateurs ont eu une vente.

<?php

// Document d'événement simple
$events->insert(array("user_id" => $id,
    
"type" => $type,
    
"time" => new MongoDate(),
    
"desc" => $description));

// Construit les fonctions map et reduce
$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 
"{$user['_id']} had {$user['value']} sale(s).\n";
}

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :


User 47cc67093475061e3d9536d2 had 3 sale(s).
User 49902cde5162504500b45c2c had 14 sale(s).
User 4af467e4fd543cce7b0ea8e2 had 1 sale(s).

Note: Utilisation de MongoCode

Cet exemple utilise la méthode MongoCode, qui prend également comme argument le scope. Cependant, actuellement, Mongo ne supporte pas l'utilisation d'un scope dans MapReduce. Si vous voulez utiliser des variables définies côté client dans les fonctions MapReduce, vous pouvez les ajouter au scope global en utilisant le champ optionnel scope avec la commande de la base de données. Voir la » documentation de MapReduce pour plus d'informations.

Note: L'argument out

Avant la version 1.8.0, l'argument out était optionnel. Si vous ne l'utilisiez pas, les résultats de MapReduce étaient écrits dans une collection temporaire, qui était supprimée lors de la fermeture de la collection. En version 1.8.0+, l'argument out est obligatoire. Reportez-vous à la » documentation sur MapReduce pour plus d'informations.

Si vous souhaitez utiliser MapReduce, Prajwal Tuladhar a créé une API pour les utilisateurs PHP de Mongo qui fournit une interface au lieu d'utiliser les commandes de base. Vous pouvez la télécharger depuis » Github et il y a un » article sur son blog expliquant comment l'utiliser.

Exemple #4 Exemple de la commande MongoDB::command() "textSearch"

Effectue une recherche fulltext avec MongoDB's 2.4 et supérieure en utilisant la fonctionalité "text search".

<?php
$m 
= new MongoClient();
$d $m->demo;
$c $d->planets;

$c->insert(array("name" => "Mercury""desc" => "Mercury is the smallest and closest to the Sun"));
$c->insert(array("name" => "Venus""desc" => "Venus is the second planet from the Sun, orbiting it every 224.7 Earth days."));
$c->insert(array("name" => "Earth""desc" => "Earth is the the densest of the eight planets in the Solar System."));
$c->insert(array("name" => "Mars""desc" => "Mars is named after the Roman god of war."));

$c->ensureIndex(array('desc' => 'text'));

$r $d->command(array("text" => "planets"'search' => "sun" ));
print_r($r);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :


Array
(
[queryDebugString] => sun||||||
[language] => english
[results] => Array
(
[0] => Array
(
[score] => 0.625
[obj] => Array
(
[_id] => MongoId Object
(
[$id] => 517549d944670a4a5cb3059a
)

[name] => Mercury
[desc] => Mercury is the smallest and closest to the Sun
)

)

[1] => Array
(
[score] => 0.55
[obj] => Array
(
[_id] => MongoId Object
(
[$id] => 517549d944670a4a5cb3059b
)

[name] => Venus
[desc] => Venus is the second planet from the Sun, orbiting it every 224.7 Earth days.
)

)

)

[stats] => Array
(
[nscanned] => 2
[nscannedObjects] => 0
[n] => 2
[nfound] => 2
[timeMicros] => 95
)

[ok] => 1
)

Exemple #5 Exemple avec la commande MongoDB::command() "geoNear"

Cet exemple montre l'utilisation de la commande geoNear.

<?php
$m 
= new MongoClient();
$d $m->demo;
$c $d->poiConcat;

$r $d->command(array(
    
'geoNear' => "poiConcat",      // Recherche dans la collection poiConcat
    
'near' => array(-0.0851.48), // Recherche à proximité de 51.48°N, 0.08°E
    
'spherical' => true,           // Active la recherche sphérique
    
'num' => 5,                    // Retourne au maximum 5 documents
));
print_r($r);
?>

Voir aussi

La documentation principale MongoDB sur les » commandes de base de données. Aussi, quelques commandes individuelles : » findAndModify, » getLastError, et » repairDatabase.

add a note add a note

User Contributed Notes 5 notes

up
3
Min He
4 years ago
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);
?>
up
1
mcuadros at gmail dot com
1 year ago
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
       
)
    )
);
up
1
roman dot drapeko at gmail dot com
3 years ago
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'
));
?>
up
0
Anonymous
3 years ago
> 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);
?>
up
-1
nanhe dot kumar at gmail dot com
1 year ago
$db=new new Mongo();

Copy old_db to new_db

$responseCopy = $db->admin->command(array(
    'copydb' => 1,
    'fromhost' => 'localhost',
    'fromdb' => 'old_db',
    'todb' =>'new_db'
    ));

Now drop old_db

if($responseCopy['ok']==1){
$responseDrop=$db->old_db->command(array('dropDatabase' => 1));
//OR
$responseDrop =$db->old_db->drop();
}

Show Output

print_r($responseCopy);
print_r($responseDrop);

Output will be something like this

Array ( [ok] => 1 )
Array ( [dropped] => old_db [ok] => 1 )
To Top