MongoDB旨在为web应用提供可扩展的高性能数据存储方案
MongoDB将数据存储为一个文档,数据结构由键值对(key=>value)组成,类似json对象,字段值可以包含其他文档、数组、文档数组
安装mongodb
# 进入
/usr/localcd/usr/local
# 下载
sudo curl-O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.4.2.tgz
# 解压
sudo tar-zxvf mongodb-osx-x86_64-3.4.2.tgz
# 重命名为 mongodb 目录
sudo mv mongodb-osx-x86_64-3.4.2mongodb
安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
exportPATH=/usr/local/mongodb/bin:$PATH
运行配置 MongoDB
# 首先创建一个数据库存储目录 /data/db:
sudo mkdir-p/data/db
# 启动 mongodb,默认数据库目录即为 /data/db:
sudo mongod
#创建文件,进入mongodb目录
cd /usr/local/mongodb
mkdir data
mkdir logs
两个文件夹,分别是存储数据库数据和日志文件的
# 然后
sudo vim mongodb.conf
其中conf文件内容为:
port=27017
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
logappend=true
第一个是配置的是mongodb的启动端口,然后dbpath是指数据的存储路径,logpath是指日志存储路径,logappend是指日志是否以追加方式添加结束编辑按 esc
然后 :wq 保存退出
# 调用mongod命令,-f 是以配置文件形式启动,后面指定的是配置文件所在的位置
sudo /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongdb.conf
# 输入命令 ,telnet ip地址 端口号,测试能不能连接某个ip地址的端口,如果能连接,证明这个端口已经开了,也就是你的应用程序已经运行了
telnet 127.0.0.1 27017
**还有个方式,输入 ps -ef|grep mongodb
启动MongoDB
在 MongoDB 安装目录的 bin 目录下执行mongod即可。
MongoDB可视化工具的使用
# 下载
# 打开
#设置
文档
文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,
**需要注意的是:
-文档中的键/值对是有序的。
-文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
-MongoDB区分类型和大小写。
-MongoDB的文档不能有重复的键。
-文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
**文档键命名规范:
-键不能含有\0 (空字符)。这个字符用来表示键的结尾。
-.和$有特别的意义,只有在特定环境下才能使用。
-以下划线"_"开头的键是保留的(不是严格要求的)。
什么是集合
就是数据库表
没有固定结构
对集合可以插入不同格式和类型的数据,但通常情况下插入集合的数据都会有一定的关联性。
当第一个文档插入时,集合就会被创建。
capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。
Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。
要注意的是指定的存储大小包含了数据库的头信息。
db.createCollection("mycoll",{capped:true,size:100000})
MongoDB数据类型
Mongodb基本命令的使用
数据库
# 启动数据库
./mongo
# 查看所有数据库
show dbs
# 删除数据库
db.dropDatabase()
# 显示当前数据库对象或集合
show db
# 运行"use"命令,可以连接到一个指定的数据库,如果数据库不存在,则创建数据库
use local
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
文档
# 刚创建的数据库并不在数据库的列表中, 要显示它,我们需要向该数据库插入一些数据。
# 插入文档,COLLECTION_NAME是集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
db.COLLECTION_NAME.insert(document) /db.COLLECTION_NAME.save(document)
# 查看文档
db.COLLECTION_NAME.find()
# 格式化返回结果查看文档
db.COLLECTION_NAME.find().pretty()
# 只返回一个文档
findOne()
# 也可以将数据直接定义成变量再插入
document=({xx:'xx',yy:'yy'});
db.COLLECTION_NAME.insert(document)
# 查看集合
show tables
# 删除集合
db.COLLECTION_NAME.drop()
# 更新文档
## update() 方法用于更新已存在的文档
参数说明:
query: update的查询条件,类似sql update查询内where后面的。
update: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern:可选,抛出异常的级别。
## save() 方法通过传入的文档来替换已有文档
参数说明:
document: 文档数据。
writeConcern:可选,抛出异常的级别。
# remove()函数是用来移除集合中的数据
参数说明:
query:(可选)删除的文档的条件。
justOne: (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern:(可选)抛出异常的级别。
# 删除所有数据
db.COLLECTION_NAME.remove({})
MongoDB 与 RDBMS Where 语句比较
MongoDB AND 条件
db.COLLECTION_NAME.find({key1:value1,key2:value2}).pretty()
MongoDB OR 条件
db.COLLECTION_NAME.find({$or:[{key1:value1},{key2:value2}]}).pretty()
AND 和 OR 联合使用
类似常规 SQL 语句为:'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
MongoDB条件操作符
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
MongoDB$type操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
db.COLLECTION_NAME.find({"条件":{$type:类型数字}})
MongoDB Limit() 方法
limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
db.COLLECTION_NAME.find(“条件”).limit(记录条数)
MongoDB Skip() 方法
skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
db.COLLECTION_NAME.find().skip(NUMBER)
MongoDB sort()方法
sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1/-1})
MongoDB 索引
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
db.COLLECTION_NAME.ensureIndex({KEY:1})
Key 值为要创建的索引字段,1为指定按升序创建索引,降序为-1,也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)
ensureIndex() 接收可选参数,可选参数列表如下:
MongoDB 聚合
主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
聚合框架中常用的几个管道操作符:
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
Node.js 连接 MongoDB
# 安装驱动
npm install mongodb
# 插入数据
# 查询数据
# 更新数据
# 删除数据