简介(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.cfg
systemLog: 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为删除),很少真正将数据删除。