nosql的介绍
- "NoSQL"⼀词最早于1998年被⽤于⼀个轻量级的关系数据库的名字
- 随着web2.0的快速发展, NoSQL概念在2009年被提了出来
- NoSQL在2010年⻛⽣⽔起, 现在国内外众多⼤⼩⽹站, 如facebook、 google、 淘宝、 京东、 百度等, 都在使⽤nosql开发⾼性能的产品
- 对于⼀名程序员来讲, 使⽤nosql已经成为⼀条必备技能
- NoSQL最常⻅的解释是“non-relational”, “Not Only SQL”也被很多⼈接受, 指的是⾮关系型的数据库
关系和非关系型的介绍
mongodb中基本的概念是 文档、集合、数据库
-
通过图示我们也可以更加直观的了解Mongo中的一些概念
关系数据库很强⼤,但是它并不能很好的应付所有的应⽤场景。 MySQL的扩展性差,⼤数据下IO压⼒⼤, 表结构更改困难
mongdb的优势
易扩展
- NoSQL数据库种类繁多,但是⼀个共同的特点都是去掉关系数据库的关系型特性.数据之间⽆关系,这样就⾮常容易扩展
大数据量,高性能
- NoSQL数据库都具有⾮常⾼的读写性能,尤其在⼤数据量下,同样表现优秀.这得益于它的⽆关系性,数据库的结构简单
灵活的数据模型
- NoSQL⽆需事先为要存储的数据建⽴字段,随时可以存储⾃定义的数据格式.⽽在关系数据库⾥,增删字段是⼀件⾮常麻烦的事情.如果是⾮常⼤数据量的表,增加字段简直就是⼀个噩梦
mongodb操作
mongodb安装
- sudo apt-get install mongodb
mongodb基本命令
- 启动sudo service mongod start
- 停止sudo service mongod stop
- 重启sudo service mongod restart
- 查看是否启动成功ps ajx | grep mongod
- 配置文件的位置/etc/mongod.conf
- 默认端口27017
- 日志的位置/var/log/mongodb/mongod.log
- 启动本地客户端mongo
- 查看帮助 mongo -help
- 退出exit或者ctrl+c
关于数据库的基本命令
- 查看当前的数据库,默认为test数据库
- db
- 查看所有的数据库
- show dbs 或者 show databases
- 切换数据库
如果数据库不存在,则创建,否则切换到指定数据库- use db_name
- 删除当前的数据库
注意:先切换到要删除的数据库- db.dropDatabase()
关于集合的基础命令
- 在mangodb里面没有表的概念,集合就相当于表,不手动创建集合,向不存在的集合中第一次加入数据时,集合就会被创建出来
- 手动创建集合(一般很少使用)
db.createCollection(name,options)
- 查看集合
show collections
- 删除集合
db.集合名称.drop()
mangodb数据类型
Object ID
文档ID
1、 每个文档都有一个属性,为_id,保证每个文档的唯一性
2、 可以自己去设置_id插入文档,如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为objectID
3、 ObjectID是一个12字节的十六进制数:
(1)、 前4个字节为当前时间戳
(2)、 接下来的3个字节的机器ID
(3)、 接下来的2个字节中MongoDB的服务进程id
(4)、 最后3个字节是简单的增量值
String
字符串,最常用,必须是有效的UTF-8
Boolean
存储一个布尔值,true或false
Integer
整数可以是32位或者64位,这取决于服务器
Double
存储浮点值
Arrays
数组或者列表,多个值存储到一个键
Object
用于嵌入式的文档,即一个值为一个文档
Null
存储Null值
Timestamp
时间戳,表示从1970-1-1到现在的总秒数
Date
存储当前日期或时间的Unix时间格式
创建日期语句如下:参数的格式为YYYY-MM-DD
new Date('2018-9-28')
插入(文档)
db.COLLECTION_NAME.insert(document)
db.集合名称.insert(文档)
文档的数据结构和JSON基本一样。
所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
更新
save()
-- 如果文档的_id已经存在则修改,如果文档的_id不存在则添加
db.集合名称.save(document)
update()
语法
db.集合名称.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
删除
- 语法
db.集合名称.remove(<query>,{justOne: <boolean>})
- 参数query:可选,删除的⽂档的条件
- 参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
- 注意: 默认是删除多条
查询
find()查询
db.集合名称.find({条件⽂档})
findOne()
查询,只返回第⼀个
db.集合名称.findOne({条件⽂档})
pretty()
将结果格式化
db.集合名称.find({条件⽂档}).pretty()
比较、范围运算符
等于
默认是等于判断, 没有运算符
小于
$lt (less than)
小于等于
$lte (less than equal)
大于
$gt (greater than)
大于等于
$gte (greater than equal)
不等于
$ne (not equal)
在范围内
$in
不在范围内
$nin
逻辑运算符
逻辑与 and
在json中写多个条件即可
逻辑或 or
使用$or ,值为数组,数组中每个元素为json
支持正则表达式
- 使用//或者$regex
-- 以'后'字开头
-- 第一种
db.wzry.find({name:/^后/})
-- 第二种
db.wzry.find({name:{$regex:'^后'}})