以下在windows环境下的操作
运行mongodb服务器软件
1. 官网下载软件(http://www.mongodb.org),并解压缩
2. 创建C:/data/db目录用来存放数据库文件(mongodb默认使用这个目录,可以手动指定其它目录),再创建一个日志文件C:\data\log.txt
3. 打开命令行(dos)窗口(如果是WIN7要以“管理员的方式打开”)
4. 拖动mongod.exe文件到命令行中执行(服务器默认监听27017端口)另外还会启动一个http的管理页面,监听端口为服务器端口号加1000,如 http://localhost:28017
使用客户端程序连接服务器
在命令行中运行mongo.exe命令连接服务器
安装为系统服务
1. 创建C:/data/db目录用来存放数据库文件(mongodb默认使用这个目录,可以手动指定其它目录),再创建一个日志文件C:\data\log.txt
2. 打开命令行,(如果是win7以管理员的方式打开),将mongod.exe拖到命令行中运行:
mongod.exe --install --dbpath C:\data\db--logpath C:\data\log.txt
安装之后查看的方式:打开服务窗口查看:
在命令行中运行services.msc
如何从服务中删除
在命令行中运行:
mongod.exe --remove
MONGDB的使用
v mongodb的脚本语言:javascript
v 帮助:分为三级
系统级别:help
数据库表:db.help()
集合:db.user.help()
v db变量
db代表当前连接的数据库。并且只能用这个变量代表当前数据库,如果切换数据库使用
use blog --> 切换到blog数据库
查看当前数据库:db
v 什么是面向文档的数据库?
mongodb是一种面向文档的数据库:就是一个概念。
数据库 》集合》文档 相对于关系型数据库:
数据库 》表 》 记录
v mongodb是无模式的数据库?
任何数据库以及任何集合无须创建直接就可以使用
如,向user数据库中的user集合中添加一条记录,如果在mysql中需要先创建数据库并设计表结构,但在mongodb无须创建任何东西直接执行:
use user --> 切换到user数据库
db.user.insert( {“user”:”Tom”, “age”: 10} ); --> 向user集合中添加一条记录
v _id字段
系统会为每一个记录添加一个_id字段,这个字段中的值确保了是整个系统中值是唯一的,相对于之前MYSQL中的主键。
v 增、删、改、查(CRUD)
新增- insert()
1. 向blog数据库中的user集合中添加一条记录
use blog --> 切换数据库
db.user.insert( {“username”:”Tom”} ) 注意字段区别大小写与数据库类型
如以下记录和上面记录不同因为Tom<>tom
db.user.insert( {“username”:”tom”} )
2. 查询记录 - find findOne(查询一条)
例1. 列出所user集合中的所有记录
db.user.find()
例2. 列出所年龄等于10岁所有的记录
db.user.find( {“age”:10} )
例3. 列出所年龄等于10岁并且姓名叫做“张三”所有的记录
db.userfind( {“age”:10 , “name”:”张三”} )
3. 删除 remove
例1. 删除user集合中所有的记录
db.user.remove() --> 删除所有记录时,索引还在。
db.user.drop() --> 删除user集合,速度更快,记录和索引都会被删除
例2。 删除所有年龄大于10岁的
db.user.remove( {“age”: {“$gt”:10} } )
4. 修改 update , save
例1. 修改年龄为10岁的第一条记录为20岁
方法一、
var d = db.user.findOne( {“age”:10} ) --> 先查询出来
d.age = 20 --> 修改年龄为20岁
db.user.save(age) --> 再存回去
方法二:
var d = db.user.findOne( {“age”:10} ) --> 先查询出来
d.age = 20 --> 修改年龄为20岁
db.user.update( {“age”:10} , d )
常见错误:
db.user.update( {“age”:10} , {“age”:20} ) --> 不是修改年龄为20岁,把这条记录修改成 {“age”:20}这个样子,不只是修改age字段,而是修改了整条记录
注意:update默认只修改一条记录
db.user.update( {“age”:10} , {“age”:20} ) --> 只会修改第一条记录,如果要修改所有的age=10的,需要设置第四个参数为true
db.user.update( {“age”:10} , {“age”:20} ,false, true ) ,当前版本是这样,但是以后的版本可能会改。
v 数据类型
结论:可以想到的类型都可以存,函数、正则等。
v Mongodb中的修改符
$lt,$gt,$ne等等(<,>,<>等)
例1. 查询出年龄不等于10岁所有的用户
db.user.find( { “age”: {“$ne” : 10} } )
v mongodb中的翻页及优化
limit :取前几条
skip :跳过前几条
count : 查询记录数
db.user.find().count() --> 查询集合中所有的记录数
每页10条,取第3页的数据?
db.user.find().skip(20).limit(10)
翻页的优化(这个思路也适用于MYSQL数据库)
db.user.find().skip(1000).limit(10) 优化后:
db.user.find( {“id” : ”$gt”:1000} ).limit(10);
SELECT * FROM user LIMIT 1000,10这两语句,也取出了前1000条然后丢掉再取10条,因为也取前1000条所以性能不是很好。
SELECT * FROM user WHERE id > 1000 LIMIT10
v 删除user数据库
use user
db.dropDatabase()
使用PHP操作mongodb
v 先让PHP支持mongodb(默认是不支持的)如何设置:
第一步:先查看当前PHP是否支持:phpinfo();
第二步:先下载相关dll文件:https://github.com/mongodb/mongo-php-driver/downloads
第三步:选择适合自己PHP环境的DLL文件:如何选择:
1 . php的版本
2. VC版本
Compiler后面显示
3. 是否是TS(thread safe)的
PHP Extention Build后面显示
第四步:确定dll文件之后修改dll文件名为php_mongo
第五步:查看PHP的扩展目录,然后复制这个文件到extension_dir后面显示的这个目录中:
第六步:查看当前使用的php.ini的位置并修改,在文件中添加:
extension=php_mongo.dll 这里的名字要与第4步中的文件名一样
重启apache
再查看PHPINFO
如果重启 APACHE失败,通常都是因为DLL文件选择错误,如果成功了会在php_info打印出来的信息中看到mongo这一项。
在php中使用mongo:
<?php
$mongo = new Mongo(); // 生成mongo 对象
/* db.user.insert( {‘user’:’tom’} ) */
$mongo->test->user-.insert( array(“username”=>”tom”,”age”=>10) );
$user =$mongo->test->user->findOne(array(“age”=>10));
$user[‘age’] = 20;
$mongo->test->user->save($user);
例:取出所有年龄大于10岁
$users =$mongo->test->user->find( array(“age” => array( ‘$gt’ => 10 )) )
在PHP 中$符有特殊的意义所以在使用时要使用’引号
/* 唯一不一样需要注意的地方: 当使用find查询多条记录时,返回的是一个游标不是二维数组 */
例1. 列出user集合中所有的用户名
$users = $db->test->user->find();
错误的作法:因为返回的不是二维所以不能用foreach循环
foreach($user as $k =>$v)
{
echo $v[‘name’];
}
正常的做法:因为返回的是游标所以:
while($users.hasNext())
{
$u =$users.getNext();
echo $u[‘age’];
}
例子代码:
相当于mysql下有个shop数据库,其下有个user表
注册:
//判断用户名是否存在
$mongo=new Mongo();
if(($count=$mongo->shop->user->find(array("username"=>$username))->count())>1){
用户存在
}else{
$mongo->shop->user->insert(array('username'=>$username,'password'=>$password));
}
登录:
用findone,不写了;
- 相关文章
- php7中使用mongodb的aggregate进行
- php7 mongodb distinct及count方法
- mongodb报No suitable servers fou
- php操作mongodb
- mongodb学习网址及基础教程
- mongodb数据库添加及删除
- mongodb集合创建与删除
- mongodb文档添加与更新
- mongodb文档查询
- php7 mongodb操作类
- 热门文章
- win7中将文件拷贝到虚拟机linux下
- phpexcel设置行高及列宽,背景颜色,
- rabbitmq无法启动
- intellij idea不显示git push按钮
- php7中使用mongodb的aggregate进行
- centos7.4 64位下swoole安装及配置
- laravel页面静态化的方法
- navicate连接mycat报1184错误
- 单点登录sso原理及php实现方式及de
- devops-jenkins容器为pending状态
- 好评文章
- phpexcel设置行高及列宽,背景颜色,
- php7中使用mongodb的aggregate进行
- intellij idea打开文件所在文件夹
- windows下使用MongoDB Compass Com
- win7中将文件拷贝到虚拟机linux下
- laravel 中悲观锁 & 乐观锁的使用
- 单点登录sso原理及php实现方式及de
- navicate连接mycat报1184错误
- rabbitmq无法启动
- laravel整合dingo/api方法步骤:jwt
- 我的项目
- 【github】www.github.com/hurong241
- 【码云】gitee.com/hu_rong/projects
- 【docker hub】hub.docker.com/repositories/hurong241
- 【packagist】packagist.org/users/hurong241/packages
- 站点信息
- 建站时间:2011年
- 文章数:607篇
- 浏览数:944440