在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显示Facebook的粉丝数量方法
Jan 08 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
PHP后期静态绑定实例浅析
Dec 21 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
移动端效果之Swiper详解
2017/10/09 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
Python 3.x 新特性及10大变化
2015/06/12 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
委托书样本
2014/04/02 职场文书
班风口号
2014/06/18 职场文书
个性与发展自我评价
2015/03/06 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
于丹论语心得观后感
2015/06/15 职场文书
感恩教师主题班会
2015/08/12 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android