shershams/lmongo

LMongo is a MongoDB package for Laravel 4.

v1.0.0-beta 2013-01-15 21:46 UTC

This package is not auto-updated.

Last update: 2024-12-17 05:23:03 UTC


README

LMongo is MongoDB package for Laravel 4. Most part of LMongo is based on Illuminate/Database (Thanks to @taylorotwell)

Please note that LMongo project is under heavy development, some functionalities are not yet tested. Please report if you find any bug.

Installation

Add shershams/lmongo as a requirement to composer.json:

{
    "require": {
        "shershams/lmongo": "*"
    }
}

And then run composer update

Once Composer has installed or updated your packages you need to register LMongo. Open up app/config/app.php and find the providers key and add:

'LMongo\LMongoServiceProvider'

Then find the aliases key and add following line to the array:

'LMongo'          => 'LMongo\Facades\LMongo',
'EloquentMongo'   => 'LMongo\Eloquent\Model',

Finally you need to publish a configuration file by running the following Artisan command.

$ php artisan config:publish shershams/lmongo

This will copy the default configuration file to app/config/packages/shershams/lmongo/config.php

Basic Usage

You may get a MongoDB instance by calling the LMongo::connection method:

$LMongo = LMongo::connection();

This will give you an instance of the default MongoDB server. You may pass the server name to the connection method to get a specific server as defined in your mongodb configuration:

$LMongo = LMongo::connection('othermongodbserver');

LMongo uses magic method to pass the collection name to the Database class and return MongoCollection instance. Then you can use any of MongoCollection methods:

$item = $LMongo->collection_name->findOne(array('key' => 'value'));

$items = $LMongo->collection_name->find(array('key' => 'value'))->limit(5);

$LMongo->collection_name->remove(array('key' => 'value'));

Get the MongoDB object:

$mongodb = $LMongo->getMongoDB();

$collection_names = $mongodb->getCollectionNames();

Get the MongoClient object:

$mongo = $LMongo->getMongoClient();

$databases = $mongo->listDBs();

Select/switch the database:

$LMongo->selectDB($dbName);

Create the database:

$LMongo->createDB($dbName);

Query Builder

Wheres

Retrieving All Rows From A Collection

$users = LMongo::collection('users')->get();

foreach ($users as $user)
{
    var_dump($user['name']);
}

Retrieving A Single Document From A Collection

$user = LMongo::collection('users')->where('name', 'John')->first();

var_dump($user['name']);

Retrieving A Single Column From A Document

$name = LMongo::collection('users')->where('name', 'John')->pluck('name');

Specifying A Fields

$users = LMongo::collection('users')->get(array('name', 'email'));

Using Where Operators

$users = LMongo::collection('users')->where('votes', 100)->get();

Or Statements

$users = LMongo::collection('users')
                ->where('votes', 100)
                ->orWhere('name', 'John')
                ->get();

Nor Statements

$users = LMongo::collection('users')
                ->where('votes', 100)
                ->norWhere('name', 'John')
                ->get();

Using Where In And Where Not In With An Array

$users = LMongo::collection('users')
                ->whereIn('id', array(1, 2, 3))->get();

Using Where All With An Array

$users = LMongo::collection('users')
                ->whereAll('tags', array('php','mongodb'))->get();

$users = LMongo::collection('users')
                ->whereNin('id', array(1, 2, 3))->get();

Using Where Exists

$users = LMongo::collection('users')
                ->whereExists('updated_at')->get();

Using Where Gt

$users = LMongo::collection('users')
                ->whereGt('votes', 1)->get();

Using Where Gte

$users = LMongo::collection('users')
                ->whereGte('votes', 1)->get();

Using Where Lt

$users = LMongo::collection('users')
                ->whereLt('votes', 1)->get();

Using Where Lte

$users = LMongo::collection('users')
                ->whereLte('votes', 1)->get();

Using Where Between

$users = LMongo::collection('users')
                ->whereBetween('votes', 1, 100)->get();

Using Where Ne

$users = LMongo::collection('users')
                ->whereNe('name', 'John')->get();

Using Where Regex

$users = LMongo::collection('users')
                ->whereRegex('name', '/John/i')->get();
//or
$users = LMongo::collection('users')
                ->whereRegex('name', new MongoRegex('/John/im'))->get();

Using Where Like

$users = LMongo::collection('users')
                ->whereLike('name', 'John','im')->get();

There are more where methods in Query/Builder.php file.

Order By

$users = LMongo::collection('users')
                ->orderBy('name', 'desc')
                ->get();

$users = LMongo::collection('users')
                ->orderBy('name', -1)
                ->get();

Offset & Limit

$users = LMongo::collection('users')->skip(10)->take(5)->get();

Advanced Wheres

Parameter Grouping

LMongo::collection('users')
            ->where('name', 'John')
            ->orWhere(function($query)
            {
                $query->whereGt('votes', 100)
                      ->whereNe('title', 'Admin');
            })
            ->get();

Aggregates

$users = LMongo::collection('users')->count();

$price = LMongo::collection('orders')->max('price');

$price = LMongo::collection('orders')->min('price');

$price = LMongo::collection('orders')->avg('price');

$total = LMongo::collection('users')->sum('votes');

Distinct

$emails = LMongo::collection('users')->distinct('email');

Inserts

Inserting Document Into A Collection

$id = LMongo::collection('users')->insert(
    array('email' => 'john@example.com', 'votes' => 0),
);

Inserting Multiple Documents Into A Collection

$ids = LMongo::collection('users')->batchInsert(
            array('email' => 'john@example.com', 'votes' => 0),
            array('email' => 'henry@example.com', 'votes' => 0),
        );

Updates

Updating Documents In A Collection

LMongo::collection('users')
            ->where('id', 1)
            ->update(array('votes' => 1));

Incrementing or decrementing a value of a column

LMongo::collection('users')->increment('votes');

LMongo::collection('users')->decrement('votes');

Deletes

Deleting Documents In A Collection

LMongo::collection('users')->where('votes', 100)->delete();
//or
LMongo::collection('users')->where('votes', 100)->remove();

Deleting All Documents From A Collection

LMongo::collection('users')->delete();
//or
LMongo::collection('users')->truncate();

Pagination

LMongo has pagination support like Laravel's Query Builder.

$users = LMongo::collection('users')->orderBy('name')->paginate(10);

foreach ($users as $user)
{
    echo $user['name'];
}

echo $user->links();

Eloquent for MongoDB

It's similar to Eloquent, except few differences:

  • It has a collection property, not table
  • Primary key field is _id, not id
  • No Pivot collections for "Many To Many" relationship. So don't use "Many To Many" relationships on a large datasets.

See Eloquent Docs.

License

Licensed under the MIT License.

TODO

  • Aggregate/group support
  • Indexes
  • GridFS