在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 相关文章推荐
PHP输出控制功能在简繁体转换中的应用
Oct 09 PHP
用PHP查询域名状态whois的类
Nov 25 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP中的正则表达式实例详解
Apr 25 PHP
PHP实现微信提现功能
Sep 30 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 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 Socket 编程
2010/04/09 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
JavaScript面象对象设计
2008/04/28 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python可以实现栈的结构吗
2020/05/27 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
一套C++笔试题面试题
2012/06/06 面试题
师生聚会感言
2014/01/26 职场文书
大学生作弊检讨书
2014/02/19 职场文书
一年级评语大全
2014/04/23 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
开学典礼致辞
2015/07/29 职场文书
2016年校长新年寄语
2015/08/17 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python