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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容