This package includes a MongoDB enabled Eloquent class that you can use to define models for corresponding collections.

use Moloquent\Eloquent\Model as Eloquent;

class User extends Eloquent {}

Note that we did not tell Eloquent which collection to use for the User model. Just like the original Eloquent, the lower-case, plural name of the class will be used as the table name unless another name is explicitly specified. You may specify a custom collection (alias for table) by defining a collection property on your model:

use Moloquent\Eloquent\Model as Eloquent;

class User extends Eloquent {

    protected $collection = 'users_collection';


NOTE: Eloquent will also assume that each collection has a primary key column named id. You may define a primaryKey property to override this convention. Likewise, you may define a connection property to override the name of the database connection that should be used when utilizing the model.

use Moloquent\Eloquent\Model as Eloquent;

class MyModel extends Eloquent {

    protected $connection = 'mongodb';


Everything else (should) work just like the original Eloquent model. Read more about the Eloquent on http://laravel.com/docs/eloquent

Retrieving All Models#

$users = User::all();

Retrieving By Primary Key#

$user = User::find('517c43667db388101e00000f');

Inserts, updates and deletes#

Inserting, updating and deleting records works just like the original Eloquent.

Saving a new model#

$user = new User;
$user->name = 'John';

You may also use the create method to save a new model in a single line:

User::create(['name' => 'John']);

Updating a model#

To update a model, you may retrieve it, change an attribute, and use the save method.

$user = User::first();
$user->email = 'john@foo.com';

There is also support for upsert operations

Deleting a model#

To delete a model, simply call the delete method on the instance:

$user = User::first();

Or deleting a model by its key:


For more information about model manipulation, check Here.


$users = User::where('votes', '>', 100)->take(10)->get();

Or Statements#

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

And Statements#

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

Where In With An Array#

$users = User::whereIn('age', [16, 18, 20])->get();

When using whereNotIn objects will be returned if the field is non existent. Combine with whereNotNull('age') to leave out those documents.

Where Between#

$users = User::whereBetween('votes', [1, 100])->get();

Where null#

$users = User::whereNull('updated_at')->get();

Where Like#

$user = Comment::where('body', 'like', '%spam%')->get();


Matches documents that have the specified field.

User::where('age', 'exists', true)->get();


Matches arrays that contain all elements specified in the query.

User::where('roles', 'all', ['moderator', 'author'])->get();


Selects documents if the array field is a specified size.

User::where('tags', 'size', 3)->get();


Selects documents where values match a specified regular expression.

User::where('name', 'regex', new \MongoDB\BSON\Regex("/.*doe/i"))->get();

NOTE: you can also use the Laravel regexp operations. These are a bit more flexible and will automatically convert your regular expression string to a MongoDB\BSON\Regex object.

User::where('name', 'regexp', '/.*doe/i'))->get();

And the inverse:

User::where('name', 'not regexp', '/.*doe/i'))->get();


Selects documents if a field is of the specified type. For more information check Here.

User::where('age', 'type', 2)->get();


Performs a modulo operation on the value of a field and selects documents with a specified result.

User::where('age', 'mod', [10, 0])->get();

Complex Wheres#

$users = User::where('name', '=', 'John')->orWhere(function($query) {
        $query->where('votes', '>', 100)
              ->where('title', '<>', 'Admin');

Raw Where#

These expressions will be injected directly into the query.

User::whereRaw(['age' => ['$gt' => 30, '$lt' => 40] ])->get();

Matches documents that satisfy a JavaScript expression. For more information check Here.