MongoDB概念

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在简化开发和为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

主要功能

  • 高性能
  • 丰富的查询语言
  • 高可用性
  • 水平可伸缩性
  • 支持多种存储引擎

Window安装MongoDB

  1. 官网下载社区版

  2. 选择Custom即可自定义安装地址
    安装

  3. 安装到服务
    从MongoDB 4.0开始,您可以在安装过程中将MongoDB设置为Windows服务,也可以仅安装二进制文件。
    服务
    我的配置如上
    选择以下任一项:

    1. 以网络服务用户身份运行服务(默认)这是Windows内置的Windows用户帐户
    2. 以本地或域用户身份运行服务
    • Service Name: 指定服务名称。默认名称为MongoDB。如果您已经拥有使用指定名称的服务,则必须选择另一个名称。
    • Data Directory: 指定数据目录,它对应于 –dbpath。如果目录不存在,安装程序将创建目录并将目录访问权限设置为服务用户。
    • Log Directory: 指定日志目录,它对应于 –logpath。如果目录不存在,安装程序将创建目录并将目录访问权限设置为服务用户。

    如果不将MongoDB配置为Windows服务,取消选中Install MongoD as a Service即可。

  4. 安装图形化界面,可以不安装(选择之后安装很慢)。

安装成功

安装失败

如果配置出错可能会出现安装失败的情况,有两种解决方式

命令行启动

在mongodb目录下创建data文件夹,在data中创建db文件夹

打开bin目录下的命令行(选中bin,shift+右键)输入mongod --dbpath ../data/db即可看到启动成功。
这是一次性的启动方法,每次启动都要这么启动,下面有永久启动的方法。

安装服务

如果服务启动失败,命令行输入mongod.exe --remove删除服务

建立几个文件夹和文件,必须创建,不然会出错

  • 数据目录:D:\MongoDB\data\db

  • 日志目录:D:\MongoDB\data\log

  • 日志文件:D:\MongoDB\data\db\mongod.log

  • 配置文件:D:\MongoDB\data\mongod.conf

日志文件不需要写入内容,配置文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
#数据库路径(根据自己安装的目录修改即可)
dbpath=D:\MongoDB\data\db
#日志输出文件路径(根据自己安装的目录修改即可)
logpath=D:\MongoDB\data\db\mongod.log
#错误日志采用追加模式
logappend=true
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#端口号 默认为27017
port=27017

跟之前一样,进入bin目录的命令行界面,输入

1
2
# 根据自己目录调整
mongod.exe --config "G:D:\MongoDB\data\mongod.conf" --install``

输入net start MongoDB就启动成功了

使用

数据库相关

命令 描述
use DATABASE_NAME 创建数据库
show db 查看当前数据库
show dbs 查看所有数据库
db.dropDatabase() 删除当前数据库
db.collection.drop() 删除集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 切换数据库:如果数据库不存在,在插入数据时创建数据库,否则切换到指定数据库。
> use example
switched to db example
# 查看所有数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
# 查看当前数据库
> db
example
# 插入数据
> db.example.insert({"namme":"test"})
WriteResult({ "nInserted" : 1 })
# 插入数据时,创建数据库
> show dbs
admin 0.000GB
config 0.000GB
example 0.000GB
local 0.000GB
# 删除当前数据库
> db.dropDatabase()
{ "dropped" : "example", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
# 删除集合
> db.test.drop()
true

插入文档

命令 描述
db.COLLECTION_NAME.insert(document) 插入文档
db.COLLECTION_NAME.find() 查询集合
1
2
3
4
5
6
7
8
9
10
>  db.col.insert({title: 'MongoDB 教程',
... description: 'MongoDB 是一个 Nosql 数据库',
... by: 'MongoDB中文网',
... url: 'http://www.mongodb.org.cn',
... tags: ['mongodb', 'database', 'NoSQL'],
... likes: 100
... })
WriteResult({ "nInserted" : 1 })
> db.col.find()
{ "_id" : ObjectId("5f23753824b1e2c8709491ad"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

插入文档可以使用insert()也可以使用save(),两种的区别在于:

  1. insert(),指明_id的情况,如果主键不存在,正常插入。主键存在,则抛 org.springframework.dao.DuplicateKeyException 异常提示主键重复,不保存当前数据。
  2. save(),指明_id的情况下,如果主键不存在,则正常插入。主键存在,则修改已存在数据。

删除文档

1
2
3
4
5
6
7
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 插入两条数据
>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'MongoDB中文网', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
WriteResult({ "nInserted" : 1 })
# 删除数据
> db.col.remove({
... 'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 })
> db.col.find()
...
# 删除一条数据
> db.col.remove({'title':'MongoDB 教程'},true,true)
WriteResult({ "nRemoved" : 1 })
> db.col.find()
{ "_id" : ObjectId("5f23917cfb7c6a540cbe1649"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

更新文档

updat()方法

1
2
3
4
5
6
7
8
9
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的。
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息
> db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Mongodb中文网",
"url" : "http://www.mongodb.org.cn",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

save方法

1
2
3
4
5
6
db.collection.save(
<document>,
{
writeConcern: <document>
}
)

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。

使用与insert()基本相同