mongodb基础知识
首页->学习资料->微服务治理->mangodb 关键词: 发布时间:2016-03-12 21:32:00 浏览次数:2589

以下在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,不写了;



赞:(1)
踩:(0)
相关文章
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进行
laravel页面静态化的方法
centos7.4 64位下swoole安装及配置
navicate连接mycat报1184错误
curl设置超时不起作用(CURLOPT_TIM
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
标签
rabbitmq mysql备份 elasticsearch golang swoole
我的项目
【github】www.github.com/hurong241
【码云】gitee.com/hu_rong/projects
【docker hub】hub.docker.com/repositories/hurong241
【packagist】packagist.org/users/hurong241/packages
站点信息
建站时间:2011年
文章数:623篇
浏览数:1357698
粤ICP备18028092号-1  微信:hurong241