When your database name contains a "-" (e.g. database-name) you need to use a string instead.
<?php
$client = new MongoDB\Client("mongodb://ip_address:port");
$collection = $client->{'database-name'}->collection;
?>
Después de la configuración inicial del controlador, continuaremos explicando cómo empezar con el controlador de MongoDB y la correspondiente biblioteca de usuario para escribir nuestro primer proyecto.
Lo último que necesitamos instalar para empezar con la apliación en sí, es la biblioteca de PHP.
La bibilioteca necesita ser instalada con » Composer, un gestor de paquetes para PHP. Las instrucciones para instalar Composer en varias plataformas se pueden encontrar en su sitio web.
Instale la biblioteca ejecutando:
$ composer require "mongodb/mongodb=^1.0.0"
Muestra algo parecido a esto:
./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) - Installing mongodb/mongodb (1.0.0) Downloading: 100% Writing lock file Generating autoload files
Composer creará varios ficheros: composer.json
,
composer.lock
, y un directorio vendor
que
contendrá la biblioteca y cualquier otra dependencia que requiera el proyecto.
Además de gestionar las dependencias, Composer también proporciona un autocargador (para las clases de las dependencias). Asegúrese que se incluye al inicio del script o en el código de arranque de la aplicación:
<?php
// Esta ruta debe apuntar al autocargador de Composer
require 'vendor/autoload.php';
Con esto hecho, ahora se puede emplear cualquier funcionalidad de la descrita en la » documentación de la biblioteca y en su » API.
Si ha empleado anteriormente el controlador antiguo (esto es, la extensión
mongo
), la API de la biblioteca debería serle familiar. Contiene una clase
» Client
para conectar a MongoDB, una clase
» Database
para operaciones a nivel de la base de datos (p.ej. comandos , gestión de colecciones)
y una clase
» Collection
para operaciones a nivel de colección (p.ej.
métodos » CRUD, gestión de índices).
Se han renombrado varios métodos de Collection para mayor claridad y para estar en
concordancia con una nueva » specification
independiente del lenguaje.
Como ejemplo, así es como se inserta un documento en la colección beers de la base de datos demo:
<?php
require 'vendor/autoload.php'; // incluir lo bueno de Composer
$cliente = new MongoDB\Client("mongodb://localhost:27017");
$colección = $cliente->demo->beers;
$resultado = $colección->insertOne( [ 'name' => 'Hinterland', 'brewery' => 'BrewDog' ] );
echo "Inserted with Object ID '{$resultado->getInsertedId()}'";
?>
En lugar de inyectar el campo _id
generado en el documento de
entrada (tal como se hacía en el antiguo controlador), ahora se pone a disposición
mediante el objeto de resultados devuelto por el método insertOne
.
Por supuesto, después de la inserción también se pueden consultar los datos que se
acaban de insertar. Para ello se utiliza el método find
, el cual devuelve un
cursor iterable:
<?php
require 'vendor/autoload.php'; // include Composer goodies
$cliente = new MongoDB\DriverMongoDB\Client("mongodb://localhost:27017");\Client("mongodb://localhost:27017");
$colección = $cliente->demo->beers;
$resultado = $colección->find( [ 'name' => 'Hinterland', 'brewery' => 'BrewDog' ] );
foreach ($resultado as $entry) {
echo $entry['_id'], ': ', $entry['name'], "\n";
}
?>
Anuque pueda no ser evidente en los ejemplos, los documentos BSON y los arrays son deserializados como clases de tipo en la biblioteca de forma predeterminada. Estas clases aseguran que los valores preservan sus tipos cuando son serializados de nuevo a BSON, lo cual evita una advertencia del antiguo controlador cuando un array podía convertise a un documento, y viceversa. Además, las clases extienden ArrayObject para mejorar la usabilidad. Se puede encontrar más información sobre cómo el controlador y la biblioteca manejan la serialización y deserialización entre variablies de PHP y BSON leyendo la especificicación de Persistencia de datos.
When your database name contains a "-" (e.g. database-name) you need to use a string instead.
<?php
$client = new MongoDB\Client("mongodb://ip_address:port");
$collection = $client->{'database-name'}->collection;
?>
Well most of the tutorials didn't explained well, So i hope this might help someone
Note: this is a part of my laravel project
//getting data from a collection
<?php
use MongoDB\Client as Mongo;
$user = "admin";
$pwd = 'password';
$mongo = new Mongo("mongodb://${user}:${pwd}@127.0.0.1:27017");
$collection = $mongo->db_name->collection;
$result = $collection->find()->toArray();
print_r($result);
?>
If you have a number of JSON documents with nested elements such as 'responseId' below and you want to know how many documents have a responseId:
{"result":{"responseId":"xyz"}}
{"result":NULL}
{"result":{"responseId":"abc"}}
I was not having luck with the following format
<?php
// trying to get the count of documents where responseId is not equal to NULL (did not work for me)
$intCount = $collection->count(['result' => ['responseId' => ['$ne' => NULL]]]);
?>
Instead I needed to use a period between the JSON elements:
<?php
// get the count of documents where responseId is not equal to NULL
$intCount = $collection->count(['result.responseId' => ['$ne' => NULL]]);
?>
To test your connection string, you can do something like this:
<?php
$mongo = new MongoDB\Client('mongodb://my_server_does_not_exist_here:27017');
try
{
$dbs = $mongo->listDatabases();
}
catch (MongoDB\Driver\Exception\ConnectionTimeoutException $e)
{
// PHP cannot find a MongoDB server using the MongoDB connection string specified
// do something here
}
?>
Do a text search on the collection with projection
$search['$text'] = ['$search' => "foo"];
$options["projection"] = ['score' => ['$meta' => "textScore"]];
$options["sort"] = ["score" => ['$meta' => "textScore"]];
$cursor = $collection->find($search, $options);
Pecl MongoDB at time of writing can be installed (see phpinfo()) but composer will complain that it's not present.
$ composer require "mongodb/mongodb=^1.0.0"
...
Your requirements could not be resolved to an installable set of packages.
If you see this try
$ composer require "mongodb/mongodb=^1.0.0" --ignore-platform-reqs