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

以下在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进行
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
标签
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年
文章数:607篇
浏览数:944440
粤ICP备18028092号-1  微信:hurong241