文章目录
一、介绍
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象的BSON格式。字段值可以包含其他文档,数组及文档数组。
MongoDB的特点
MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索
引。它是一个面向集合的,模式自由的文档型数据库。
具体特点总结如下:
(1)面向集合存储,易于存储对象类型的数据
(2)模式自由
(3)支持动态查询
(4)支持完全索引,包含内部对象
(5)支持复制和故障恢复
(6)使用高效的二进制数据存储,包括大型对象(如视频等)
(7)自动处理碎片,以支持云计算层次的扩展性
(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序
(9) 文件存储格式为 BSON(一种 JSON 的扩展)
MongoDB的体系结构
MongoDB 数据类型
基本数据类型
null: 用于表示空值或者不存在的字段, {“X”:null}
布尔型:
布尔类型有两个值true和false,{“x”:true}
数值:
shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。
浮点型:
对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符号整数),{“x”:NumberInt(“3”)}、{“x”:NumberLong(“3”)}
字符串:
UTF-8字符串都可以表示为字符串类型的数据,{“x”:“呵呵”}
日期:
日期被存储为自新纪元依赖经过的毫秒数,不存储时区,{“x”:new Date()}
正则表达式:
查询时,使用正则表达式作为限定条件,语法与JavaScript的正则表达式相同,{“x”: /[abc]/}
数组:
数据列表或数据集可以表示为数组,{“x”: [“a”,“b”,“c”]}
内嵌文档:
文档可以嵌套其他文档,被嵌套的文档作为值来处理,{“x”:{“y”:3 }}
对象Id:
对象id是一个12字节的字符串,是文档的唯一标识(主键),{“x”: objectId() }
二进制数据:
二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式。
代码:
查询和文档中可以包括任何JavaScript代码,{“x”:function(){/…/}}
二、安装MongoDB
使用Docker 安装
# 拉取镜像
docker pull mongo:3.6
# 查看镜像
docker images
# 创建容器
docker run --name mongo -v ~/docker/mongo:/data/db -p 27017:27017 -d mongo:3.6
# 查看容器
docker ps
# 进入容器
docker exec -it mongo /bin/bash
修改配置文件,开启远程连接
docker cp mongo:/etc/mongod.conf.orig /data/
将其中的
bindIp: 127.0.0.1
注释掉# bindIp: 127.0.0.1
或者改成bindIp: 0.0.0.0
即可开启远程连接
docker cp /data/mongod.conf.orig mongo:/etc/mongod.conf.orig
使用图形工具连接
三、语法
总结:
集合名称就相当于表名
# 插入
db.集合名称.insert(数据)
#查找全部
db.集合名称.find()
#查询一个
db.集合名称.findOne({
userid:'01'})
db.集合名称.find().limit(3)
# 修改文档
db.集合名称.update(条件,修改后数据)
# 删除全部文档
db.集合名称.remove({
})
# 删除指定文档
db.集合名称.remove({
_id:'1'})
# 统计条数
db.集合名称.count()
# 根据条件统计条数
db.集合名称.count({
content