MongoDB简介
MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:
- 面向集合存储,易于存储对象类型的数据
- 模式自由
- 支持动态查询
- 支持完全索引,包含内部对象
- 支持复制和故障恢复
- 使用高效的二进制数据存储,包括大型对象
- 文件存储格式为BSON(一种JSON的扩展)
MongoDB基本概念介绍
- 文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)
- 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表
- MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限
- MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大
- 每一个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键
MongoDB数据类型
数据类型 | 描述 | 举例 |
---|---|---|
null | 表示空值或者未定义的对象 | {"x":null} |
布尔值 | 真或者假:true或者false | |
32位整数 | 32位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数 | |
64位整数 | 64位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数 | |
64位浮点数 | 64位浮点数。shell中的数字就是这一种类型 | |
字符串 | UTF-8字符串 | {"foo":"bar"} |
符号 | shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串 | |
对象id | 文档的12字节的唯一id | {"id": ObjectId()} |
日期 | 从标准纪元开始的毫秒数 | {"date":new Date()} |
正则表达式 | 文档中可以包含正则表达式,遵循JavaScript的语法 | {"foo":/foobar/i} |
代码 | 文档中可以包含JavaScript代码 | {"x":function() {}} |
未定义 | undefined | {"x":undefined} |
数组 | 值的集合或者列表 | {"arr": ["a","b"]} |
内嵌文档 | 文档可以作为文档中某个key的value | {"x":{"foo":"bar"}} |
下载MongoDB
https://www.mongodb.com
https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.3.tgz
Mac OSX 平台安装 MongoDB
cd /usr/local
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.3.tgz
sudo tar -zxvf mongodb-osx-ssl-x86_64-3.4.3.tgz
sudo mv mongodb-osx-x86_64-3.4.2 mongodb
安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
export PATH=/usr/local/mongodb/bin:$PATH
运行 MongoDB
首先我们创建一个数据库存储目录 /data/db:
sudo mkdir -p /data/db
启动 mongodb,默认数据库目录即为 /data/db:
sudo mongod
# 如果没有创建全局路径 PATH,需要进入以下目录
cd /usr/local/mongodb/bin
sudo ./mongod
连接到MongoDB
连接请自行百度😆😆😆😆
MongoDB常用操作
-
创建数据库,使用命令 use 数据库名称 ,如:
use mydb1
-
删除当前数据库
db.dropDatabase()
-
查看所有数据库,使用命令
show dbs
-
查看当前所在数据库
db
-
查看当前数据库中所有的集合
show collections 或使用 show tables
-
创建集合有两种方式,显示创建和隐式创建
显示创建可以使用命令 db.createCollection(“集合名称") 隐式创建可以使用命令 db.集合名称.insert({}),指创建集合并同时向集合中插入数据
-
向集合添加文档
db.集合名称.insert({})
-
删除集合中的文档
db.集合名称.remove({删除条件})
-
查询集合中的文档
db.集合名称.find({条件}),或者使用 db.集合名称.findOne() 查询第一个文档
-
查询集合中的文档 ,使用条件表达式(<, <=, >, >=,!=)
//大于: 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.customer.count(); db.customer.find().count(); db.customer.find({age:{$lt:5}}).count(); db.customer.find().sort({age:1}); 降序-1 db.customer.find().skip(2).limit(3); db.customer.find().sort({age:-1}).skip(2).limit(3); db.customer.find().sort({age:-1}).skip(2).limit(3).count(); db.customer.find().sort({age:-1}).skip(2).limit(3).count(0); db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);
查询集合中的文档 ,$all主要用来查询数组中的包含关系,查询条件中只要有一个不包含就不返回
查询集合中的文档 ,$in,类似于关系型数据库中的IN
查询集合中的文档 ,$nin,与$in相反
-
查询集合中的文档 ,$or,相当于关系型数据库中的OR,表示或者的关系,例如查询name为user2或者age为3的文档,命令为:
db.customer.find({$or:[{name:”user2”},{age:3}]})
-
查查询集合中的文档 ,$nor,表示根据条件过滤掉某些数据,例如查询name不是user2,age不是3的文档,命令为:
db.customer.find({$nor:[{name:”user2”},{age:3}]})
-
查询集合中的文档 ,$exists,用于查询集合中存在某个键的文档或不存在某个键的文档,例如查询customer集合中存在name键的所有文档,可以使用 db.customer.find({name:{$exists:1}}),
$exists:1表示真,指存在 $exists:0表示假,指不存在
更新集合中的文档,语法如下:
db.collection.update(criteria,objNew,upsert,multi)
参数说明:
criteria:用于设置查询条件的对象
objNew:用于设置更新内容的对象
upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
multi:如果有多个符合条件的记录,是否全部更新,取值为0或1
注意:默认情况下,只会更新第一个符合条件的记录
一般情况下后两个参数分别为0,1 ,即:
db.collection.update(criteria,objNew,0,1)