mongoDB基础

一 mongoDB基本介绍

        mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。他是nosql数据库中功能最丰富,最像关系数据库的。      

        实例:系统上运行的mongodb的进程,类似于mysql实例;        

        库:每个数据库都是独立的,有自己的用户,权限,独立存储集合,类似于mysql的库;

        集合:由一组文档构成,类似于mysql的表;

        文档mongodb数据库的最小数据集,是由多个键值对有序组合的数据单元,类似于mysql的数据记录;

MongoDb作为nosql数据库,它具有以下特性:

        1、面向集合文档存储,适合存储json形式的数据;

        2、格式自由,数据格式不固定,数据结构发生变更的同时不会影响程序运行;

        3、面向对象的sql查询语句,基本涵盖关系型数据库的所有查询语句;

        4、有索引的支持,查询效率更快;

        5、支持复制和自动故障转移;

        6、可以使用分片集群提升查询性能
        针对以上的特性,我们可以在以下场景中采用mongdb数据库:1、应用不需要事务(这一条是最重要的,如果应用的事务的依赖很强,是不能选择该数据库的);2、数据模型无法确定,经常发生变更;3、应用的qps达到2000以上;4、应用存储的数据很大,达到TB级别以上;5、应用需要大量的地理位置查询或者文本查询。因此mongodb使用与游戏,社交,物流,物联网,视频直播这些场景。

二 mongoDB的安装与使用

1 下载MongoDB

        官方下载地址:https://www.mongodb.com/download-center/communit

        这里的安装是以linux为例的,因为实际生产场景大部分都是在linux进行部署。接下来我看介绍一下mongdb的安装步骤;

        1、先进入mongodb的官网MongoDB下载,选择要下载的版本以及系统,需要注意的是,在安装mongodb之前需要先准备好jdk的环境变量,选择好要下载的版本以后,点击copy link,在linux系统中执行以下命令;

 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.11.tgz

2 解压安装

2.1解压

tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgz

2.2创建目录/usr/local/mongo,并将解压完的mongodb目录移动到/usr/local/mongo

mkdir -p /usr/local/mongo
mv mongodb-linux-x86_64-rhel70-4.2.1/* /usr/local/mongo/ 

2.3切到/usr/local/mongo目录下,创建目录

mkdir -p data/db        #数据库目录
mkdir -p logs           #日志目录
mkdir -p conf           #配置文件目录
mkdir -p pids           #进程描述文件目录

创建好的目录如下:
 

 2.4在conf目录,增加配置文件mongo.conf

vi /usr/local/mongo/conf/mongo.conf

#数据保存路径
dbpath=/usr/local/mongo/data/db/
#日志保存路径
logpath=/usr/local/mongo/logs/mongo.log
#进程描述文件
pidfilepath=/usr/local/mongo/pids/mongo.pid
#日志追加写入
logappend=true
bind_ip_all=true
#mongo默认端口
port=27017
#操作日志容量
oplogSize=10000
#开启子进程
fork=true 

2.5通过配置文件启动mongo服务端

/usr/local/mongo/bin/mongod -f /usr/local/mongo/conf/mongo.conf 

 

2.6启动mongo客户端

/usr/local/mongo/bin/mongo --host 127.0.0.1 --port 27017 

        mongo在创建完成以后会默认存在admin,config,local这三个数据库,其中admin中存储的是mongodb的用户、角色等信息;config中存储的是分片集群基础信息;local中主要存储的是副本集的元数据。

MongoDB基本操作及增删改查

1.基本操作

1.1登录数据库

mogo

1.2查看数据库

show databases;

 1.3选择数据库

use 数据库名

 

如果切该数据库不存在,例如use admin2,那么会隐式创建这个数据库。 

use admin2

如果切换到一个没有的数据库,例如use admin2,那么会隐式创建这个数据库。

 1.4查看集合

show collections

 在这里插入图片描述

1.5创建集合

db.createCollection('集合名')

1.6删除集合

 db.集合名.drop()

 在这里插入图片描述

 1.7删除数据库

        通过use语法选择数据
        通过db.dropDataBase()删除数据库

在这里插入图片描述

2.增删改查

2.1添加数据

db.集合名.insert(JSON数据)

如果集合存在,那么直接插入数据。如果集合不存在,那么会隐式创建。

示例:在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)

use test2

db.c1.insert({"username":"webopenfather","age":"18"})

  • 数据库和集合不存在都隐式创建
  • mongodb会给每条数据增加一个全球唯一的_id

 _id键的组成

自己增加_id
可以,只需要给插入的JSON数据增加_id键即可覆盖(但实战强烈不推荐) 

 db.c1.insert({"_id":"1","uname":"webopenfather", "age":18})

 一次性插入多条数据
传递数据,数组中写一个个JSON数据即可

 db.c1.insert([

        {"username":"z3","age":"18"},

        {"username":"l4","age":"18"},

         {"username":"w5","age":"18"}

])

快速插入10条数据
由于mongodb底层使用JS引擎实现的,所以支持部分js语法。因此:可以写for循环

for (var i=1; i<=10; i++) {    

        db.c2.insert({uanme: "a"+i, age: i})

}

2.2查询文档

db.集合名.find(条件[,查询的列])

条件写法
查询所有的数据{}或者不写
查询age=6的数据{age:6}
既要age=6又要性别=男{age:6,sex:‘男’}
查询的列(可选参数)写法
查询全部列(字段)不写
只显示age列(字段){age:1}
除了age列(字段)都显示{age:0}

其他语法

运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$in表示查询某一个字段在某一个范围中的所有文档
$nin表示查询某一个字段不在某一个范围内的所有文档

3实例练习
3.1查询所有数据

db.c1.find()

 3.2只查看uname列

db.c1.find({},{uname:1})

 3.3除了uname列都查看

db.c1.find({},{uname:0})

3.5查询age大于5的数据

db.c1.find({

        age:{$gt:5}

})

 

3.6查询年龄是5岁、8岁、10岁的数据

db.c2.find({

        age:{$in:[5,8,10]}

})

 3.7只看年龄列

db.c2.find({},{age:1})

3.8只看年龄以外的列

db.c2.find({},{age:0})

 4.修改文档

db.集合名.update(条件,新数据[是否新增,是否修改多条,])

新数据此数据需要使用修改器,如果不使用,那么会将新数据替换原来的数据。

db.集合名.update(条件,{修改器:{键:值}}[是否新增,是否修改多条,])

修改器作用

        inc递增

        rename重命名列

        set修改列值

        unset删除列

是否新增
指条件匹配不到数据则插入(true是插入,false否不插入默认)
db.c3.update({uname:"zs30"},{$set:{age:30}},true)

是否修改多条
指将匹配成功的数据都修改(true是,false否默认)
db.c3.update({uname:"zs2"},{$set:{age:30}},false,true)

实例练习
准备工作

use test2;
for(var i = 1; i<= 10; i++){
    db.c3.insert( {"uname":"zs"+i,"age":i} );
}

4.1将{uname:"zs1"}改为{uname:"zs2"} 

db.c3.update({"uname":"zs1"},{$set:{"uname":"zs2"}})

4.2给{uname:"zs10"}的年龄加2岁或减2

db.c3.update({"uname":"zs10"},{$inc:{age:2}}) 

递减只需要将2改为-2即可。

5.删除文档

db.集合名.remove(条件[,是否删除一条])

是否删除一条
 true:是(删除的数据为第一条)

db.c3.find()

db.c3.remove({},true)

db.c3.find()

 false:否

db.c3.find()

db.c3.remove({"uname":"zs3"})

db.c3.find()

 6总结

6.1增

db.集合名.insert(JSON数据)

6.2删

db.集合名.remove(条件 [,是否删除一条t rue是 false否 --默认])

也就是默认删除多条

 6.3改

db.集合名.update(条件, 新数据  [,是否新增,是否修改多条])

升级语法db.集合名.update(条件,{修改器:{键:值}})

 6.4查

db.集合名.find(条件 [,查询的列])

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值