NoSQL简介及MongoDB的常用命令

NoSQL

NoSQL = Not Only SQL(非关系型数据库)

关系型数据库

关系型数据库中的表都是存储一些格式化的数据结构,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。

关系型数据库:database table row filed

User(id name age)
±-------------------------
1 jack 10
2 rose 20

非关系型数据库

非关系型数据库以键值对(key——value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。

非关系型数据库:database collection document json(key-value)

collection:User
{id:1,name:“jack”,age:10}
{id:2,address:“bj”}

常见的Nosql数据库

CouchDB 目前国内外正在应用NoSQL的网站有:
Redis 新浪微博 Redis
MongoDB Google Bigtable
Neo4j Amazon SimpleDB
HBase 淘宝数据平台 Tair
BigTable 视觉中国网站 MongoDB
优酷运营数据分析 MongoDB
飞信空间 HandlerSocket
豆瓣社区 BeansDB

优缺点

优势

  1. 简单的扩展
  2. 快速的读写
  3. 低廉的成本
  4. 灵活的数据模型

缺点

  1. 不提供对SQL的支持
  2. 支持的特性不够丰富
  3. 现有的产品不够成熟
  4. 不支持事务

MongoDB简介

  1. 文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库中的行(但比行要复杂的多)
  2. 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表
  3. MongoDB的单个实例可以容纳多个独立的数据库,每个数据库都有自己的集合和权限
  4. MongoDB自带简介但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大
  5. 每个文档都有一个特殊的键“_id",它在文档所处的集合中是唯一的,相当于关系型数据库的表的主键。

基本数据类型

  1. null:用于表示空值或者不存在的字段,{“x”:null}
  2. 布尔型:布尔类型有两个值true和false,{“x”:true}
  3. 数值:shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
  4. 字符串:UTF-8字符串都可以表示为字符串类型的数据,{“x”:“呵呵”}
  5. 日期:日期被存储为自新纪元依赖经过的毫秒数,不存储时区,{“x”:new Date()}
  6. 正则表达式:查询时,使用正则表达式作为限定条件,语法与JavaScript的正则表达式相同,{“x”?[abc]/}
  7. 数组:数据列表或数据集可以表示为数组,{“x”: [“a“,“b”,”c”]}
  8. 内嵌文档:文档可以嵌套其他文档,被嵌套的文档作为值来处理,{“x”:{“y”:3 }}
  9. 对象Id:对象id是一个12字节的字符串,是文档的唯一标识,{“x”: objectId() }
  10. 二进制数据:二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式。
  11. 代码:查询和文档中可以包括任何JavaScript代码,{“x”:function(){//}}

MongoDB安装

  1. 在官网下载https://www.mongodb.com/download-center/community
  2. 解压之后在系统环境变量path中配置bin的目录
  3. 输入monggo出来命令说明配置成功
  4. 接着启动服务,新建一个名叫monggo.bat的文件,里面的内容为:mongod --dbpath=你自己的数据库存放地点,我的是mongod --dbpath=E:\NoSQL\mongodb-4.0.9\data
  5. 点击运行如同
    在这里插入图片描述

MongoDB连接服务器

在命令行中可以使用mongo命令连接到MongoDB服务器,如下,输入mongo命令默认连接到本地的名称为test的数据库,如果希望连接到远程数据库,可以使用mongo ip:port(端口号)
在这里插入图片描述

命令

作用命令
查看目前使用的数据库 db
创建数据库(如果数据库存在就进入数据库,如果不存在就创建,也叫做隐式创建 )use 数据库名称
删除当前数据库db.dropDatabase()
查看所有数据库show dbs
查看当前所在数据库db
查看当前数据库中所有的集合show collections/show tables
删除集合 db.集合名称.drop()
向集合添加文档db.集合名称.insert({key:value,...})
删除集合中的文档db.集合名称.remove({删除条件}),不加删除条件为删除集合中所有文档

创建集合

两种方式 显示创建和隐式创建
显示创建可以使用命令db.createCollection(“集合名称”)
在这里插入图片描述
隐式创建可以使用命令db.集合名称.insert({}),指创建集合并同时向集合中插入数据,例如db.customer.insert({name:“jack”})
在这里插入图片描述

查询

查询集合中的文档db.集合名称.find({条件})

在这里插入图片描述

查询集合中的文档,返回某些特定的键值:db.集合名称.find({},{key1:1,key2:true,key3:0,key4:false})

key1键值,key2键值显示
除key3,key4外显示
在这里插入图片描述

查询集合中的文档,使用条件表达式(<,<=,>,>=,!=)

在这里插入图片描述
//大于:field>value
db.collection.find({field:{$gt:value}});
在这里插入图片描述

//小于:field<value
db.collection.find({field:{$lt:value}});
在这里插入图片描述

//大于等于:field>-value
db.collection.find({field:{$gte:value}});

//小于等于:field<=value
db.collection.find({field:{$lte:value}});
在这里插入图片描述

//不等于:field!=value
db.collection.find({field:{$ne:value}});
在这里插入图片描述

查询集合中的文档,统计(count)、排序(sort)、分页(skip,limit)

db.集合名.count();
db.集合名.find().count();
db.集合名.find({age:{$lt:5}}).count();
在这里插入图片描述
db.集合名.find().sort({age:1}) ;
在这里插入图片描述
db.集合名.find().skip(2),limit(3);
skip代表跳过几个,limit代表到几
db.集合名.find().sort({age:-1}).skip(2).limit(3);
在这里插入图片描述
db.集合名.find().sort({age:-1}).skip(2).limit(3).count();
count由参数如果不写默认为0,并且count默认为统计find()的值,不看后面的skip,limit,sort
db.集合名.find().sort({age:-1}).skip(2).limit(3).count(0);
db.集合名.find().sort({age:-1}).skip(2).limit(3).count(1);
当参数为1时,那么查出来多少,结果为多少。
在这里插入图片描述

查询集合中的文档,$all主要用来查询数组中的包含关系,查询条件中只要有一个不包含就不返回

在这里插入图片描述

查询集合中的文档,$in,类似于关系型数据库中的IN

有一个就能查出来
在这里插入图片描述

n i n , 与 nin,与 nin,in相反

在这里插入图片描述

查询集合中的文档,$or,相当于关系型数据库中的OR,表示或者的关系,例如查询name为user2或者age为20的文档,命令为:

db.user.find({$or:[{name:“user2”},{age:20}]})
在这里插入图片描述

查询集合中的文档,KaTeX parse error: Expected '}', got 'EOF' at end of input: …find({address:{exits:1}})

$exists:1表示真,指存在
$exists:0表示假,指不存在
在这里插入图片描述

查询集合中的文档,类似于关系型数据库,mongodb中也有游标的概念

在这里插入图片描述
在这里插入图片描述

更新

更新集合中的文档语法如下:

db.collection.update(criteria,objNew,upsert,multi)
参数说明:
criteria:用于设置查询条件的对象
objNew:用于设置更新内容的对象
upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
multi:如果有多个符合条件的记录,是否全部更新,取值为0或1

注意:默认情况下,只会更新第一个符合条件的记录一般情况下后两个参数分别为0,1,即:
db.collection.update(criteria,objNew,0,1)

$set

更新集合中的文档,KaTeX parse error: Expected '}', got 'EOF' at end of input: …name:"user1"},{set:{address:“bj”}},0,1)
将name为user1的文档修改address为tj,其他键值对不变,命令为
db.c1.update({name:user1"},{$set:{address.“tj”}},0,1)

$inc

使用 i n c 将 几 何 中 n a m e 为 u s e r 1 的 a g e 加 1 , 其 他 键 不 变 , inc将几何中name为user1的age加1,其他键不变, incnameuser1age1inc表示使某个键值加减指定的数值

$unset

KaTeX parse error: Expected '}', got 'EOF' at end of input: …name:"user1"},{unset:{address:1}},0,1)也可以写成address:true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值