您的位置:首页 > 数据库 > Mongodb

【MongoDB】MongoDB基本入门01

2017-11-22 16:12 369 查看

NoSQL简介

NoSQL(Not Only SQL),意即“不仅仅是SQL”,指的是非关系型的数据库。

非关系型数据库的优点:

1、简单的扩展(以键值对的方式存储,结构比较灵活)

2、快速的读写

3、低廉的成本

4、灵活的数据模型

缺点:

1、不提供SQL的支持

2、支持的特性不够丰富(没有事务等这些概念)

3、现有的产品不够成熟(相对于关系型数据库而言)

关系型数据库和MongoDB逻辑结构关系对比

关系型数据库:

MySQL数据库(database),表(table)、记录(rows)三个层次概念组成。

MongoDB:

Mongodb数据库(database)、集合(collection)、文档对象(document)三个层次概念组成。MongoDB里的集合对应于关系型数据库里的表,一个文档就相当于一条记录。

其中MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。

同时MongoDB自带JavaScript shell,这个工具对于管理MongoDB实例的操作数据库作用非常大。

同时每一个文档(每条记录)都有一个特殊的键”_id”,它在文档所处的集合中是唯一的,相当于数据库中的表的主键。

安装MongoDB

我们只需要下载解压MongoDB之后,将环境变量配置到bin目录级别:
D:\Program Files\mongodb\bin
即可。

服务器端启动MongoDB

我们需要现在D盘新建一个名为
mongodbpath
的文件夹,然后执行如下命令:

mongod --dbpath=D:/mongodbpath


客户端连接MongoDB

我们使用如下命令:
mongo localhost:27017
,我们也可以直接使用
mongo
命令直接进行连接默认以本机作为服务端时且端口号为默认端口的MongoDB。

客户端一些常用操作命令

命令功能
db用于查看当前操作的文档(数据库)
show dbs查看所有数据库
use DATABASE_NAME无则创建数据库,有则切换到数据库
db.dropDatabase()删除当前数据库
show collections/show tables查看当前数据库中所有的集合
db.createCollection(‘youxin’)显示创建名为
youxin
集合(类似于数据库中的表)
db.c1.insert({name:’gebilaowang’,age:29})创建名为c1的集合
db.c2.remove({age:0})c2集合移除age为0的记录

MongDB查询

db.c1.find({name:’wangwu},{age:1}):表示查询c1集合条件为name=’wangwu’,返回结果字段为age字段;

db.c2.find().count():查询当前集合有多少条记录;

db.c2.findOne():查询当前集合的第一条记录;

db.c2.find({age:{$gt:5}}):查找c2集合中age大于5的记录

db.c2.find({age:{$gte:5}}):查找c2集合中age大于或等于5的记录

db.c2.find({age:{$lt:5}}):查找c2集合中age小于5的记录

db.c2.find({age:{$lte:5}}):查找c2集合中age小于或等于5的记录

db.c2.find({age:{$ne:5}}):查找c2集合中age不等于5的记录

db.c2.find().skip(0).limit(10):从第1条开始查询10条记录。

db.c5.find({age:{$all:[15,55]}}):查找c2集合中age字段包含15和55。

db.c2.find({age:{$in:[15,55]}}):查找c2集合中age字段包含15或55。

db.c2.find({age:{$nin:[15,55]}}):查找c2集合中age字段不包含15也不包含55。

db.c2.find({$or:[{name:'liuyang'},{age:{$in:[15,55]}}]})
:表示name=’liuyang’或者age为15或者age为55。

db.c2.find({name:{$exists:1}}):查询c2中包含name字段的记录。

MongoDB中的游标

var i = db.c2.find():获取游标

i.hasNext():判断是否存在值

i.next():获取值

MongoDB更新操作

语法:db.collection.update(criteria,objNew,upsert,multi)

参数说明

criteria:用于设置查询条件的对象

objNew:用于设置更新内容的对象

upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1

multi:如果有多个符合条件的记录,是否全部更新,取值为0或1

更新命令功能
db.c1.update({age:33},{name:’wanglihong’});表示c1集合中第一个匹配age=33的记录,将name改为
wanglihong
,但这种改法会使其他字段覆盖
db.c1.update({age:33},{$set:{name:’xiaohuahua’}})表示c1集合中第一个匹配age=33的记录,将name改为
xiaohuahua
,这个只设置name字段,不覆盖其他属性
db.c1.update({name:’xiaoxue’},{$set:{age:25}},0,1)表示的c1集合全部记录匹配name=’xiaoxue’,将会进行全局更新
db.c1.update({name:’xiaoxue’},{$set:{age:25}},1,1)表示更新的记录没有找到就新增一条
db.c2.update({name:’zhangsan’},{$inc:{age:1}},0,1)表示更新c2集合中name为
zhangsan
的字段,然后将age的值全部加1
db.c2.update({name:’zhangsan’},{$unset:{age:1}},0,1)表示更新c2集合中name为
zhangsan
的字段,然后将age这个字段去除掉

MongoDB索引

//往c3集合插入500万条数据
for(var i=1;i<=5000000;i++) {
db.c3.insert({name:'hushiyang',age:i});
}
//查询信息结果:
db.c3.find({age:100}).explain()
//结果:
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 5000000,
"nscanned" : 5000000,
"nscannedObjectsAllPlans" : 5000000,
"nscannedAllPlans" : 5000000,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 11,
"nChunkSkips" : 0,
"millis" : 8977,
4000
//用时8秒多
"indexBounds" : {

},
"server" : "DESKTOP-D2BBINO:27017"
}
//c3集合age字段创建索引
db.c3.ensureIndex({age:1})
//创建唯一索引:则age不允许有重复的值
db.c3.ensureIndex({age:1},{unique:true})
//删除索引
db.c3.dropIndex({age:1})


MongoDB的数据备份

查看数据库的相关操作:

db.help()

备份数据库:

将当前主机中的itcast数据库备份至D盘itcast文件夹下

mongodump -h localhost:27017 -d itcast -o D://itcast


删除数据库:

db.dropDatabase()

恢复数据库:

mongorestore -h localhost:27017 -d itcast -directoryperdb D://itcast/itcast

集合中数据导出:

将itcast数据库中的c1集合拷贝到d://itcast中的c1.xls文件中去

mongoexport -h localhost:27017 -d itcast -c c1 -o d://itcast/c1.xls


集合中数据导入

将集合备份数据导入到person集合中

mongoimport -h localhost:27017 -d itcast -c person d://itcast/c1.xls
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息