MongoDB 基本使用

博客地址:http://www.moonxy.com

一、前言

在当前流行的 NoSQL 数据库中,MongoDB 是大家接触比较早而且用得比较多的数据库。MongoDB 是文档型的 NoSQL 数据库,具有大数据量、高并发等优势,文档格式是类似 JSON 的 BSON 格式,但缺点是不能建立实体关系,而且也没有事务管理机制。

BSON 是一种二进制压缩、带类型的 JSON 格式。BSON 主要用于 MongoDB 中,是 MongoDB 的数据存储格式,Json 是像字符串一样存储的,bson 是按结构存储的(像数组或者说是结构体)。

二、下载并启动 MongoDB

2.1 下载 MongoDB

进入官网页面下载,当前为最新版 3.6.2,官网地址:https://www.mongodb.com

Windows 版本分为两种:

zip 压缩包版:

https://downloads.mongodb.com/win32/mongodb-win32-x86_64-enterprise-windows-64-3.6.2.zip

msi安装版:

https://downloads.mongodb.com/win32/mongodb-win32-x86_64-enterprise-windows-64-3.6.2-signed.msi

2.2 启动 MongoDB

比如下载压缩包解压后,进入 bin 目录,有以下常用命令:

mongod:启动 MongoDB 数据库。通常需要指定一个数据存放的目录,默认是 /data/db。如果启动的时候还没有创建 /data/db,则会启动失败。可以通过 --dbpath 参数指定特定的目录,参数详情可以键入 ./mongod --help;

mongo:启动一个 Shell ./mongo,通过 shell 可以对 MongoDB 进行增删该查等操作,MongoDB Shell 是 MongoDB 自带的交互式 Javascript shell,用来对 MongoDB 进行操作和管理的交互式环境;

mongodump:备份数据库;

mongorestore:恢复数据库。

方式一:命令行下运行 MongoDB 服务器

比如 MongoDB 解压后的目录为:F:\software\mongodb,然后依次创建 data 目录和 db 目录,然后进入命令行:

首先,启动 MongoDB 数据库服务,如下:

F:\software\mongodb\bin\mongod --dbpath F:\software\mongodb\data\db

显示结果如下:

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>F:\software\mongodb\bin\mongod --dbpath F:\software\mongo
db\data\db
2018-02-07T21:51:18.375+0800 I CONTROL  [initandlisten] MongoDB starting : pid=3
484 port=27017 dbpath=F:\software\mongodb\data\db 64-bit host=PC201601051134
2018-02-07T21:51:18.375+0800 I CONTROL  [initandlisten] targetMinOS: Windows 7/W
indows Server 2008 R2
2018-02-07T21:51:18.376+0800 I CONTROL  [initandlisten] db version v3.6.2
2018-02-07T21:51:18.376+0800 I CONTROL  [initandlisten] git version: 489d177dbd0
f0420a8ca04d39fd78d0a2c539420
2018-02-07T21:51:18.376+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL
 1.0.1u-fips  22 Sep 2016
......

其次,运行 ./mongo,便会进入 shell,如下:

F:\software\mongodb\bin\mongo

显示结果如下:

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>F:\software\mongodb\bin\mongo
MongoDB shell version v3.6.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.2
Server has startup warnings:
2018-02-07T21:51:20.617+0800 I CONTROL  [initandlisten]
2018-02-07T21:51:20.618+0800 I CONTROL  [initandlisten] ** WARNING: Access contr
ol is not enabled for the database.
2018-02-07T21:51:20.620+0800 I CONTROL  [initandlisten] **          Read and wri
te access to data and configuration is unrestricted.
2018-02-07T21:51:20.621+0800 I CONTROL  [initandlisten]
2018-02-07T21:51:20.622+0800 I CONTROL  [initandlisten] ** WARNING: This server
is bound to localhost.
......

也可以采用第二种方式,将其配置为 MongoDB 服务,任选一个方式启动即可。

2.3 远程连接 MongoDB 服务器

MongoDB 连接远程服务器的命令格式如下:

mongo 远程主机IP或域名:MongoDB端口号/数据库名 -u user -p password

// 指定用户名和密码连接到指定的MongoDB数据库
mongo 192.168.1.200:27017/test -u user -p password

或者使用如下格式:

mongodb://username:password@hostname/dbname

三、命令行使用 MongoDB

下面介绍 MongoDB 的增删改查的命令行操作。

3.1 创建数据库

MongoDB 使用 use DATABASE_NAME 来创建或者切换数据库。

运行"use"命令,可以连接到一个指定的数据库。如果数据库不存在,则创建数据库,否则切换到指定数据库。MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

MongoDB Enterprise > use spring
switched to db spring

执行 "db" 命令可以显示当前数据库对象或集合。

MongoDB Enterprise > db
spring

3.2 删除数据库

先切换到要删除的数据库,然后执行 db.dropDatabase() 删除当前数据库。

MongoDB Enterprise > use javaee
switched to db javaee
MongoDB Enterprise > db.dropDatabase()
{ "ok" : 1 }

3.3 插入文档

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)

MongoDB 3.2 版本后还有以下几种语法可用于插入文档:

db.collection.insertOne():向指定集合中插入一条文档数据;

db.collection.insertMany():向指定集合中插入多条文档数据;

如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

MongoDB Enterprise > db.user.insert({_id:"10001",desc:"springboot开发框架",tag:["IT","Spring"],comment:{good:1256,bad:12}})
MongoDB Enterprise > db.user.save({_id:"10002",desc:"java",tag:["IT","编程语言"],comment:{good:56,bad:1}})

"show dbs" 命令可以显示所有非空数据库的列表。

MongoDB Enterprise > show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
spring  0.000GB

"show tables" 命令可以显示数据库中的所有集合。

MongoDB Enterprise > show tables
user

3.4 查询文档

MongoDB使用 find(query, projection) 方法查询文档。除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

db.collection.find(query, projection),如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:db.collection.find(query, projection).pretty()。

无参时,使用 db.collection.find() 查询所有文档:

MongoDB Enterprise > db.user.find()
{ "_id" : "10001", "desc" : "springboot开发框架", "tag" : [ "IT", "Spring" ], "comment" : { "good" : 1256, "bad" : 12 } }
{ "_id" : "10002", "desc" : "java", "tag" : [ "IT", "编程语言" ], "comment" : {"good" : 56, "bad" : 1 } }

通过 id 条件查询:

MongoDB Enterprise > db.user.find({_id:"10001"})
{ "_id" : "10001", "desc" : "springboot开发框架", "tag" : [ "IT", "Spring" ], "c
omment" : { "good" : 1256, "bad" : 12 } }

通过 comment 查询好评数量小于 1000 的条目:

MongoDB Enterprise > db.user.find({"comment.good":{$lt:1000}})
{ "_id" : "10002", "desc" : "java", "tag" : [ "IT", "编程语言" ], "comment" : {"good" : 56, "bad" : 1 } }

也可以使用类似 SQL 的 and、or、in 来查询,传入多个键值对,以下默认使用 and 来查询,好评数量大于 100 且小于 1000 的文档条目

MongoDB Enterprise > db.user.find({"comment.good":{$gt:100},"comment.good":{$lt:1000}})
{ "_id" : "10002", "desc" : "java", "tag" : [ "IT", "编程语言" ], "comment" : {"good" : 56, "bad" : 1 } }

使用 or 查询,好评数量大于 1000 或者小于 100 的文档条目:

MongoDB Enterprise > db.user.find({$or:[{"comment.good":{$gt:1000}},{"comment.good":{$lt:100}}]})
{ "_id" : "10001", "desc" : "springboot开发框架", "tag" : [ "IT", "Spring" ], "comment" : { "good" : 1256, "bad" : 12 } }
{ "_id" : "10002", "desc" : "java", "tag" : [ "IT", "编程语言" ], "comment" : {"good" : 56, "bad" : 1 } }

使用 in 查询:

MongoDB Enterprise > db.user.find({_id:{$in:["10001","10002"]}})
{ "_id" : "10001", "desc" : "springboot开发框架", "tag" : [ "IT", "Spring" ], "comment" : { "good" : 1256, "bad" : 12 } }
{ "_id" : "10002", "desc" : "java", "tag" : [ "IT", "编程语言" ], "comment" : {"good" : 56, "bad" : 1 } }

常用操作符:

$gt:greater than  >

$gte:gt equal  >=

$lt:less than  <

$lte:lt equal  <=

$ne:not equal !=

$eq:equal  =

$in:in

$nin:not in

模糊查询,可使用正则表达式:

MongoDB Enterprise > db.user.find({"desc":/spring/})
{ "_id" : "10001", "desc" : "springboot开发框架", "tag" : [ "IT", "Spring" ], "comment" : { "good" : 1256, "bad" : 12 } }

3.5 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。

在3.2版本开始,MongoDB提供以下更新集合文档的方法:

db.collection.updateOne() 向指定集合更新单个文档;

db.collection.updateMany() 向指定集合更新多个文档;

db.collection.replaceOne() 向指定集合替换单个文档;

replaceOne() 与 updateOne() 的区别在与前者是替换整个文档,而后者是更新部分文档。这两个方法都只替换匹配的第一条记录,如果有多条记录匹配,可以使用 updateMany。

MongoDB Enterprise > db.user.updateOne({"_id":"10001"},{$set:{"desc":"基于springboot开发框架"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

3.6 删除文档

MongoDB remove()函数是用来移除集合中的数据。现在官方推荐使用 deleteOne() 和 deleteMany() 方法,如果使用 deleteMany({}) 方法时候没有指定任何参数,则表示删除该集合中的所有文档。

MongoDB Enterprise > db.user.remove({"_id":"10003"})
WriteResult({ "nRemoved" : 1 })

四、MongoDB 和传统 SQL 术语比较

MongoDB 中的术语与传统 SQL 的术语不太相同,但是之间有一定的对应关系。

SQL术语 MongoDB术语 解释说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins / 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键
posted on 2018-02-08 22:12  沐小悠  阅读(374)  评论(0编辑  收藏  举报