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