laravel MongoDB 快速的使用

Eloquent

该软件包包括一个支持MongoDB的Eloquent类,您可以使用它来定义相应集合的模型。

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class User extends Eloquent {}

请注意,我们没有告诉Eloquent哪个集合用于User模型。 就像原始的Eloquent一样,除非明确指定了另一个名称,否则该类的小写复数名称将用作集合名称。 您可以通过在模型上定义集合属性来指定自定义集合(表的别名):

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class User extends Eloquent {

    protected $collection = 'users_collection';

}

NOTE: Eloquent还假设每个集合都有一个名为id的主键列。 您可以定义primaryKey属性来覆盖此约定。 同样,您可以定义连接属性以覆盖使用模型时应使用的数据库连接的名称。

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class MyModel extends Eloquent {

protected $connection = 'mongodb';

}

Optional: Alias

您还可以通过将以下内容添加到config / app.php中的别名数组来注册MongoDB模型的别名:

'Moloquent'      => Jenssegers\Mongodb\Eloquent\Model::class,

这将允许您使用注册的别名,如:

class MyModel extends Moloquent {}

查询

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

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

如果未更改默认数据库连接,则需要在查询时指定它。

$user = DB::connection('mongodb')->collection('users')->get();

Read more about the query builder on http://laravel.com/docs/queries

Schema

数据库驱动程序还具有(有限的)架构构建器支持。 您可以轻松地操作集合并设置索引:

Schema::create('users', function($collection)

{

    $collection->index('name');

    $collection->unique('email');

});

支持的操作有:

        1、 create and drop

        2、 collection

        3、 hasCollection

        4、 index and dropIndex (compound indexes supported as well)

        5、unique

        6、 background, sparse, expire, geospatial (MongoDB specific)

所有其他(不受支持的)操作都实现为虚拟传递方法,因为MongoDB不使用预定义的模式。在http://laravel.com/docs/schema上阅读有关架构构建器的更多信息

地理空间索引

地理空间索引可用于查询基于位置的文档。 它们有两种形式:2d和2dhere。 使用模式构建器将这些添加到集合中。

添加 2d索引:

Schema::create('users', function($collection)

{

    $collection->geospatial('name', '2d');

});

添加 2dsphere索引:

Schema::create('users', function($collection)

{

    $collection->geospatial('name', '2dsphere');

});

扩展

验证

如果您想使用Laravel的本机Auth功能,请注册此包含的服务提供商:

'Jenssegers\Mongodb\Auth\PasswordResetServiceProvider',

此服务提供程序将稍微修改内部DatabaseReminderRepository以添加对基于MongoDB的密码提醒的支持。如果您不使用密码提醒,则无需注册此服务提供商,其他一切都应该正常工作。

队列

如果要将MongoDB用作数据库后端,请更改config / queue.php中的驱动程序:

'connections' => [

    'database' => [

        'driver' => 'mongodb',

        'table'  => 'jobs',

        'queue'  => 'default',

        'expire' => 60,

    ],

]

如果要使用MongoDB处理失败的作业,请更改config / queue.php中的数据库:

'failed' => [

    'database' => 'mongodb',

    'table'    => 'failed_jobs',

],

并在config / app.php中添加服务提供者:

    Jenssegers\Mongodb\MongodbQueueServiceProvider::class,

Sentry

如果您想将此库与Sentry一起使用,请查看https://github.com/jenssegers/Laravel-MongoDB-Sentry

Sessions

MongoDB会话驱动程序在单独的包中提供,请查看https://github.com/jenssegers/Laravel-MongoDB-Session

示例

基本用法

检出model中是所有数据

$users = User::all();

根据主键检索出数据

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

where

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

Or

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

And

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

whereIn

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

当使用whereNotIn对象时,如果该字段不存在则返回。 与whereNotNull('age')结合使用可省去这些文件。

使用Where Between

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

Where null

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

Order By

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

Offset & Limit

$users = User::skip(10)->take(5)->get();

Distinct

Distinct requires a field for which to return the distinct values.

$users = User::distinct()->get(['name']);

// or

$users = User::distinct('name')->get();

Distinct can be combined with where:

$users = User::where('active', true)->distinct('name')->get();

Advanced Wheres

$users = User::where('name', '=', 'John')->orWhere(function($query){

        $query->where('votes', '>', 100)

        ->where('title', '<>', 'Admin');

})->get();

Group By

$users = Users::groupBy('title')->get(['title', 'name']);

Aggregation(聚合)

Aggregations仅仅使用于高于 MongoDB 2.2版本

$total = Order::count();

$price = Order::max('price');

$price = Order::min('price');

$price = Order::avg('price');

$total = Order::sum('price');

聚合可以与以下内容结合使用:

$sold = Orders::where('sold', true)->sum('price');

聚合也可以用于子文档:

$total = Order::max('suborder.price');

注意:此aggreagtion仅适用于单个子文档(如embedsOne)而非子文档数组(如embedsMany)

###Like

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

###递增和递减的列数值

对指定的属性执行增量或减量(默认值1):

User::where('name', 'John Doe')->increment('age');

User::where('name', 'Jaques')->decrement('weight', 50);

您还可以指定要更新的其他列:

User::where('age', '29')->increment('age', 1, ['group' => 'thirty something']);

User::where('bmi', 30)->decrement('bmi', 1, ['category' => 'overweight']);

软删除

软删除模型时,实际上并未从数据库中删除它。 而是在记录上设置deleted_at时间戳。 要为模型启用软删除,请将SoftDeletingTrait应用于模型:

use Jenssegers\Mongodb\Eloquent\SoftDeletes;

class User extends Eloquent {

    use SoftDeletes;

    protected $dates = ['deleted_at'];

}

更多信息: http://laravel.com/docs/eloquent#soft-deleting

你可能感兴趣的:(laravel MongoDB 快速的使用)