简介(https://www.mongodb.com/)
-
MongoDB是为了快速开发互联网Web应用而设计的数据库系统; -
MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分; -
MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的各种各样的JSON(BSON,比普通的JSON的功能要更加的强大); -
MongoDB是一个NoSQL(Not Only SQL)的数据库(非关系型数据库); -
MongoDB数据库使用的是javaScript进行操作的,在MongoDB含有一个对ES标准实现的引擎,在MongoDB中所有ES中的语法中都可以使用。
安装及启动
安装
-
下载
- 下载地址:https://www.mongodb.org/dl/win32/
- 偶数版本为稳定版,奇数版本为开发版
- 3.2版本后不支持32位系统
安装
-
配置环境变量
C:\Program Files\MongoDB\Server\3.4\bin -
在
c盘根目录- 创建一个文件夹
data - 在
data中创建一个文件夹db
- 创建一个文件夹
启动
基本操作
| 操作 | 命令 |
|---|---|
| 启动服务器 | mongod --dbpath 路径 --port 端口号 |
| 启动客户端 | mongo |
手动启动
-
打开
cmd命令行窗口输入
mongod启动mongodb服务器。-
安装32位注意:
启动服务器时,需要输入如下内容:
mongod --storageEngine=mmapv1- 该
cmd窗口不可关闭
-
-
再打开一个
cmd窗口输入
mongo连接mongodb(启动客户端),出现>,则启动成功。
后台启动
将MongoDB设置为系统服务,可以自动在后台启动,不需要每次都手动启动。
在
c盘根目录创建data,并在在data下创建db和log文件夹-
在
bin所在目录C:\Program Files\MongoDB\Server\3.4下添加一个配置文件mongod.cfgsystemLog: destination: file path: c:\data\log\mongod.log storage: dbPath: c:\data\db 以管理员的身份打开命令行窗口
-
执行如下的命令
sc.exe create MongoDB binPath= "\"mongod的bin目录\mongod.exe\" --service --config=\"mongo的安装目录\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"例如:
sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.4\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" 启动
mongodb服务-
如果启动失败,证明上边的操作有误:
- 在控制台输入
sc.exe delete MongoDB删除之前配置的服务 - 重复上述1-5步骤
- 在控制台输入
-
错误码1053解决方法:
-
cmd删除之前配置的服务
sc.exe delete MongoDB-
cmd输入
"C:/Program Files/MongoDB/Server/3.4/bin/mongod.exe" --bind_ip 127.0.0.1 --logpath "c:/data/log/mongod.log" --logappend --dbpath "c:/data" --directoryperdb --serviceName MongoDB --install-
cmd启动服务
net start MongoDB -
安装可视化管理工具
下载地址:https://www.mongodbmanager.com/download
CRUD操作
完整操作详见:https://docs.mongodb.com/manual/reference/operator/
基本操作
| 操作 | 命令 |
|---|---|
| 进入指定的数据库 | use 数据库 |
| 显示所有的数据库 | show dbs |
| 显示数据库中所有的集合 | show collections |
| 显示当前所在的数据库 | db |
备注:
- 当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合。
插入文档
| 操作 | 命令 | 备注 |
|---|---|---|
| 向集合中插入一个或多个文档 | db.<collection>.insert() | 传入对象或数组 |
| 向集合中插入一个文档 | db.<collection>.insertOne() | 传入对象 |
| 向集合中插入多个文档 | db.<collection>.insertMany() | 传入数组 |
备注:
- 当向几何中插入文档时,如果没有给文档指定
_id属性,则数据库会自动为文档添加_id属性,该属性用来作为文档的唯一标识(根据时间戳及机器码生成,确保唯一) -
<collection>表示集合名,下同
查询文档
| 操作 | 命令 | 备注 |
|---|---|---|
| 查询所有符合条件的文档 | db.<collection>.find() | 接收一个对象作为参数:<br />{}表示查询集合中所有的文档<br />{属性:值}查询属性是指定值的文档<br />返回的是一个数组 |
| 查询第一个符合条件的文档 | db.<collection>.findOne() | 返回的是一个对象 |
| 获取查询结果的数量 | db.<collection>.find().count() | 返回数值 |
| 设置显示数据上限 | db.<collection>.find().limit() | |
| 跳过指定数量数据 | db.<collection>.find().skip() | |
| 指定文档排序规则 | db.<collection>.find().sort() | 需要传递对象来指定排序规则:<br />1表示升序<br />-1表示降序 |
| 设置查询结果的投影 | db.<collection>.find({},{attr:1,_id:0}) | 在第二个参数位置设置查询结果:<br />1表示显示<br />0表示不显示 |
备注:
skip()和limit()书写先后顺序对结果无影响(先执行skip()后执行limit())。
查询条件
| 功能 | 命令 | 例子 |
|---|---|---|
| 通过内嵌文档对文档进行查询 | {“文档名.文档名”:值} | db.mans.find({"hobby.movies":"love"}) |
| 查询大于条件 | $gt | db.mans.find({age:{$gt:20}}) |
| 查询小于条件 | $lt | db.mans.find({age:{$lt:20}}) |
| 查询大于等于条件 | $gte | db.mans.find({age:{$gte:20}}) |
| 查询小于等于条件 | $lte | db.mans.find({age:{$lte:20}}) |
修改文档
| 操作 | 命令 | 备注 |
|---|---|---|
| 修改、替换集合中的一个或多个文档 | db.<collection>.update(查询条件,新对象,配置项) | 默认情况下会使用新对象来替换旧对象<br />需要使用修改操作符修改指定属性<br />默认只会修改一个,第三个参数对象中muti属性值改为true则变为修改多个 |
| 修改集合中的一个文档 | db.<collection>.updateOne() | 只会修改一个 |
| 修改集合中的多个文档 | db.<collection>.updateMany() | 只会修改多个 |
| 替换集合中的一个文档 | db.<collection>.replaceOne() |
修改操作符
| 功能 | 操作符 | 例子 |
|---|---|---|
| 修改文档中指定属性 | $set | db.mans.update({name: 'Tom'},{$set: {age:23}}) |
| 删除文档中指定属性 | $unset | db.mans.update({name: 'Tom'},{$unset: {age:23}}) |
| 数组添加一个新元素 | $push | db.mans.update({name: 'Tom'},{$push:{"hobby.movies":"love"}}) |
| 数组添加一个新元素(已存在则不会添加) | $addToSet | db.mans.update({name: 'Tom'},{$addToSet:{"hobby.movies":"love"}}) |
删除文档
| 操作 | 命令 | 备注 |
|---|---|---|
| 删除集合中的一个或多个文档 | db.<collection>.remove(查询条件,配置项) | 默认删除多个,第二个参数传入true则变为只删除一个<br />可以根据条件删除文档,传递条件方式与find()相同 |
| 删除集合中的一个文档 | db.<collection>.deleteOne() | 删除一个 |
| 删除集合中的多个文档 | db.<collection>.deleteMany() | 删除多个 |
| 清空一个集合 | db.<collection>.remove({}) | 删除所有,性能略差 |
| 删除一个集合 | db.<collection>.drop() | |
| 删除一个数据库 | db.dropDatabase() |
备注:
一般会在数据库的数据中添加一个字段,用来表示数据是否被删除(0为未删除,1为删除),很少真正将数据删除。