在Laravel中使用MongoDB的方法示例


Posted in PHP onNovember 11, 2019

MongoDB实用场景

  • 产品用户访问日志,点击埋点统计信息
  • 业务系统环境参数配置信息
  • 业务系统运行时日志,如laravel.log,nginx.log

使用Homebrew在macoOS安装MongoDB PHP Driver

在macOS中,MongoDB 扩展已经从Homebrew仓库中移除,需要通过pecl安装此扩展。

$ sudo pecl install mongodb -v
...

Build process completed successfully
Installing '/usr/local/Cellar/php@7.2/7.2.19/pecl/20170718/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.5.4
Extension mongodb enabled in php.ini

在项目中,使用phpinfo() 查询PHP扩展安装位置。

...
Configuration File (php.ini) Path  /usr/local/etc/php/7.2
Loaded Configuration File  /usr/local/etc/php/7.2/php.ini
Scan this dir for additional .ini files  /usr/local/etc/php/7.2/conf.d
Additional .ini files parsed  /usr/local/etc/php/7.2/conf.d/ext-opcache.ini, /usr/local/etc/php/7.2/conf.d/php-memory-limits.ini
....

按照ext-opcache.ini配置,创建一个ext-mongodb.ini文件

touch /usr/local/etc/php/7.2/conf.d/ext-mongodb.ini

将mongodb.so扩展写入该文件

[mongodb]
 extension=/usr/local/Cellar/php@7.2/7.2.19/pecl/20170718/mongodb.so

同时在php.ini中移除mongodb.so扩展

extension="mongodb.so" // remove
extension="php_mongodb.so" // remove

重启一下PHP

sudo brew service restart --all

查看是否安装成功

php -m|grep mongodb

在Laravel中使用MongoDB

使用Composer创建一个Laravel项目

composer create-project --prefer-dist laravel/laravel laravel-mongodb-exploer -vvv

成功后,再安装Laravel-MongoDB扩展

composer require jenssegers/mongodb -vvv

按照扩展文档说明,我们添加一个MongoDB数据库连接

//database.php
...
'mongodb' => [
      'driver'  => 'mongodb',
      'host'   => env('MONGODB_HOST', 'localhost'),
      'port'   => env('MONGODB_PORT', 27017),
      'database' => env('MONGODB_DATABASE'),
      'username' => env('MONGODB_USERNAME'),
      'password' => env('MONGODB_PASSWORD'),
      'options' => [
        'database' => 'admin' // sets the authentication database required by mongo 3
      ]
    ],
...
 
 
//.env
... 
MONGODB_HOST=127.0.0.1
MONGODB_PORT=27017
MONGODB_DATABASE=viewers
...

命令行创建MongoDB数据库

macOS中,在命令行执行mongo开启MongoDB Shell

./mongo

使用show dbs查看已有数据库

show dbs;

admin  0.000GB
config  0.000GB
local  0.000GB
viewers 0.000GB

如果没有发现viewers,则创建该数据库。注意只有viewers中存在collection时, 上面结果才会显示viewers

use viewers;

使用数据库后,需要创建colleciton

db.ad_clicks.insert({"ip":"201.35.63.14", "ad_index": 3, "created_at": "2019-06-10 11:34:12"})

使用find查询记录

> db.ad_clicks.find()
{ "_id" : ObjectId("5cf71b34e14620598643d23b"), "ip" : "201.34.46.3", "ad_index" : "2", "created_at" : "2019-06-05 11:34:53" }
{ "_id" : ObjectId("5cf71d3de14620598643d23d"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 11:11:45" }
{ "_id" : ObjectId("5cf71d3ee14620598643d23e"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 11:11:45" }
{ "_id" : ObjectId("5cf71d44e14620598643d23f"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 11:11:45" }
{ "_id" : ObjectId("5cf71d45e14620598643d240"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 12:34:12" }
{ "_id" : ObjectId("5cfe28823316506991c41786"), "ip" : "201.35.63.14", "ad_index" : 3, "created_at" : "2019-06-10 11:34:12" }

在Laravel DB中查询MongoDB

使用了Laravel-MongoDB扩展,可以基于Eloquent与Query Builder操作MySQL一样的数据php artisan thinker

查询ad_clicks集合所有记录

DB::connection('mongodb')->table('ad_clicks')->get()

查询单个记录

DB::connection('mongodb')->collection('ad_clicks')->find('5cf71b34e14620598643d23b')

修改某个记录

DB::connection('mongodb')->collection('ad_clicks')->where('_id', '5cf71b34e14620598643d23b')->update(['ad_index'=>2]);

在Laravel ORM中查询MongoDB

在项目中,创建一个Model

php artisan make:model Models/AdClick

修改继承父类和数据库连接,AdClick.php

...
use Jenssegers\Mongodb\Eloquent\Model;

class AdClick extends Model
{
  protected $connection = 'mongodb';
 
   /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = [];

  /**
   * The attributes that aren't mass assignable.
   *
   * @var array
   */
  protected $guarded = [];
}

继续在Thinker中,插入数据

App\Models\AdClick::create(['ip' => '31.42.4.14', 'ad_index' => 4, 'created_at' => '2019-06-10 18:10:01', 'ip2long' => ip2long('31.42.4.14')]);

统计访问数据

App\Models\AdClick::where('ip', '31.42.4.14')->count()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
PHP文件操作实现代码分享
Sep 01 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
深入PHP数据加密详解
Jun 18 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
Jun 12 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
destoon整合UCenter图文教程
Jun 21 PHP
php实现的常见排序算法汇总
Sep 08 PHP
PHP写日志的实现方法
Nov 05 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
PHP使用递归按层级查找数据的方法
Nov 10 #PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 #PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 #PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 #PHP
PHP多进程简单实例小结
Nov 09 #PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 #PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 #PHP
You might like
PHP程序员不应该忽略的3点
2015/10/09 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
jQuery实现图片加载完成后改变图片大小的方法
2016/03/29 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
获取python文件扩展名和文件名方法
2018/02/02 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
基于python实现雪花算法过程详解
2019/11/16 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
大二法学专业职业生涯规划范文
2014/02/12 职场文书
数控专业自荐书范文
2014/03/16 职场文书
学校校庆演讲稿
2014/05/22 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
销售业务员岗位职责
2015/02/13 职场文书
员工年度工作总结2015
2015/05/18 职场文书
活着观后感
2015/06/03 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
作文之亲情600字
2019/09/23 职场文书
七年级作文之秋游
2019/10/21 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python