Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB PHP Error: Warning: Undefined property: MongoDB\Driver\Manager

Tags:

php

mongodb

I'm trying to use MongoDB on my local machine using the advice in this stack overflow. I'm using XAMPP on Windows 10, php version 8.01, and MongoDB extension 1.9.0.

It's a very basic script that connects to MongoDB and tries to use one of the databases.

But I am still getting this warning:

Connection to database successfully
Warning: Undefined property: MongoDB\Driver\Manager::$aws_inventories in C:\xampp\htdocs\mongo_connect.php on line 8

This is my code:

<?php
   require 'C:\xampp\htdocs\vendor\autoload.php'; // include Composer's autoloader
   $DB_CONNECTION_STRING="mongodb://localhost:27017";
   // connect to mongodb
   $m = new MongoDB\Driver\Manager( $DB_CONNECTION_STRING );
   echo "Connection to database successfully";
   // select a database
   $db = $m->aws_inventories;
?>

How can I get rid of the warning and connect to the DB correctly?

like image 259
bluethundr Avatar asked Aug 29 '26 08:08

bluethundr


1 Answers

First, you're trying to access a property which doesn't exists in MongoDB\Driver\Manager class object.

Second, $db = $m->aws_inventories; works with MongoDB\Client library.

Here are few example to get collections list or find all/specific document/s or insert/bulk insert, update a document or to perform a distinct query

Get all collections of aws_inventories:

try {
    $manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
    $command = new MongoDB\Driver\Command(["listCollections" => 1]);
    
    $cursor = $manager->executeCommand("aws_inventories", $command);
    
    // list of all collections in aws_inventories
    $collections = $cursor->toArray();
    
    var_dump($collections);
} catch (\MongoDB\Driver\Exception\Exception $e) {
}

Get all documents from a collection:

try {
    $manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
    
    // setting options and filter
    $filter  = [];
    $options = [];
    
    /*
    // or to find specific documents based on a condition and limit records
    $filter  = [
        'service' => 'ec2',
        'instance' => 'co',
        'type' => 'c5',
        'vCPU' => [
            '$gt' => 2
        ]
    ];
    
    $options = [
        'limit' => 10,
        'maxTimeMS' => 1000,    // to limit the execution time of a query
        'sort' => [
            'vCPU' => -1
        ]
    ];
    */
    
    // constructing the query
    $query = new MongoDB\Driver\Query($filter, $options);
    
    $cursor = $manager->executeQuery('aws_inventories.test', $query);
    
    foreach ($cursor as $document) {
        var_dump($document);
    }
} catch (\MongoDB\Driver\Exception\Exception $e) {
}

To perform distinct query:

try {
    $manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
    
    $query = [
        'size' => '2xlarge'
    ];
    $command = new MongoDB\Driver\Command([
        'distinct' => 'test',   // Collection name
        'key' => 'instance',    // field for which we want to get distinct values
        'query' => $query       // criteria to filter documents
    ]);
        
    $cursor = $manager->executeCommand("aws_inventories", $command);
    
    // to get distinct values as array
    $instances = current($cursor->toArray())->values;
    
    var_dump($instances);
} catch (\MongoDB\Driver\Exception\Exception $e) {
}

To insert single/multiple document/s:

try {
    $manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
    $bulk = new MongoDB\Driver\BulkWrite;

    $bulk->insert([
        'service' => 'ec2',
        'instance' => 'co',
        'type' => 'c5',
        'size' => 'large',
        'model' => 'c5.large',
        'vCPU' => 2,
        'memory' => 4,
        'storage' => 'ebs-only',
        'network_bandwidth' => 10,
        'ebs_bandwidth' => 4750  
    ]);
    
    $bulk->insert([
        'service' => 'ec2',
        'instance' => 'gp',
        'type' => 't3',
        'size' => 'nano',
        'model' => 't3.nano',
        'vCPU' => 2,
        'memory' => 0.5,
        'storage' => 'ebs-only',
        'network_bandwidth' => 5 
    ]);
    
    $result = $manager->executeBulkWrite('aws_inventories.test', $bulk);
    
} catch (\MongoDB\Driver\Exception\Exception $e) {
}

To update existing document/s: (Taken from executeUpdate example)

try {
    $manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
    $criteria = [
        'service' => 'ec2',
        'type' => 'c5'
    ];
    
    $document = [
        '$set' => [
            'features' => [
                'Powered by the AWS Nitro System, a combination of dedicated hardware and lightweight hypervisor'
            ]           
        ]       
    ];

    $updateOptions = array(
        'multi' => true,    // false - to update only first matching document, true - update all matching documents
        'upsert' => 0
    );
    
    $writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100);

    $result = $manager->executeUpdate('aws_inventories.test', $criteria, $document, $updateOptions, $writeConcern);
    
    printf("Updated %d document(s)\n", $result->getModifiedCount());
    printf("Matched %d document(s)\n", $result->getMatchedCount());
    printf("Upserted documents: %d\n", $result->getUpsertedCount());
    foreach ($result->getUpsertedIds() as $index => $id) {
        printf("upsertedId[%d]: ", $index);
        var_dump($id);
    }
    
    /* If the WriteConcern could not be fulfilled */
    if ($writeConcernError = $result->getWriteConcernError()) {
        printf("%s (%d): %s\n", $error->getMessage(), $error->getCode(), var_export($error->getInfo(), true));
    }
    
    /* If the write could not happen at all */
    foreach ($result->getWriteErrors() as $writeError) {
        printf("%s (%d)\n", $error->getMessage(), $error->getCode());
    }
} catch (\MongoDB\Driver\Exception\Exception $e) {
}
like image 156
Haridarshan Avatar answered Aug 31 '26 00:08

Haridarshan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!