注册

Laravel 框架中使用 MongoDB 数据库的操作

下面是详细的“Laravel 框架中使用 MongoDB 数据库的操作”的完整攻略。

准备工作

在 Laravel 中使用 MongoDB,首先需要安装 MongoDB 扩展。可以通过 Composer 安装 jenssegers/mongodb 扩展:

composer require jenssegers/mongodb

config/database.php 文件中添加 MongoDB 配置:

'mongodb' => [
    'driver' => 'mongodb',
    'host' => env('MONGODB_HOST', 'localhost'),
    'port' => env('MONGODB_PORT', 27017),
    'username' => env('MONGODB_USERNAME', ''),
    'password' => env('MONGODB_PASSWORD', ''),
    'database' => env('MONGODB_DATABASE', ''),
],

连接 MongoDB

使用 Laravel 提供的 MongoDB Facade 连接 MongoDB 数据库:

use Illuminate\Support\Facades\MongoDB;

$collection = MongoDB::connection()->collection('users');

如果 MongoDB 设置了用户名和密码,则需要在连接时传递认证参数:

$collection = MongoDB::connection()->collection('users', [
    'username' => 'root',
    'password' => '123456',
]);

查询数据

Laravel 中使用 MongoDB 查询数据也十分简单,与传统 SQL 查询不同,MongoDB 使用查询条件数组作为参数:

$users = $collection->where('age', '>', 18)
                    ->orderBy('created_at', 'desc')
                    ->take(10)
                    ->get();

// 查询名称为 jack 的用户
$user = $collection->where('name', 'jack')->first();

更新数据

Laravel 中使用 MongoDB 更新数据也很简单,直接传递更新的属性数组即可:

$collection->where('name', 'jack')->update(['age' => 20]);

示例

下面给出两个示例:

示例一:使用 MongoDB 存储日志

假设我们要使用 MongoDB 存储网站的访问日志,可以在 config/logging.php 中添加如下配置:

'channels' => [
    'mongo' => [
        'driver' => 'monolog',
        'handler' => MongoDBHandler::class,
        'handler_with' => [
            'collection' => env('LOG_MONGODB_COLLECTION'),
            'database' => env('LOG_MONGODB_DATABASE'),
            'level' => 'debug',
            'bubble' => true,
        ],
    ],
    // ...
],

然后创建 app/Logging/MongoDBHandler.php 文件:

collection = $collection;

        parent::__construct($level, $bubble);
    }

    protected function write(array $record): void
    {
        $this->collection->insertOne($record);
    }
}

最后在控制器中使用 Log 记录日志就可以了:

use Illuminate\Support\Facades\Log;

class HomeController extends Controller
{
    public function index()
    {
        Log::channel('mongo')->info('User visited home page', ['user_id' => 123]);

        // ...
    }
}

示例二:使用 MongoDB 存储用户评论

假设我们要使用 MongoDB 存储用户评论,可以创建 app/Models/Comment.php 模型类:

然后在控制器中保存用户评论:

use App\Models\Comment;

class CommentController extends Controller
{
    public function create(Request $request)
    {
        $comment = new Comment();
        $comment->content = $request->input('content');
        $comment->save();

        // ...
    }
}

至此,关于 “Laravel 框架中使用 MongoDB 数据库的操作”的完整攻略就介绍完了。