快速实现数据存储尝试MongoDB搭建教程

1. MongoDB简介

MongoDB 是一款开源的 NoSQL 数据库管理系统,它用 BSON(二进制 JSON)格式存储数据,在数据存储的时候比关系型数据库 MySQL、Oracle、PostgreSQL 等等要更加的灵活。MongoDB 可以很好地应用于大型分布式 Web 应用和大数据量存储场景。

MongoDB 与传统关系型数据库的区别在于它是基于文档的,也就是说,数据可以以 BSON 格式(JSON 的扩展)经过编码后存储在一个文档中,文档可以有不同的结构,这使得数据更加的灵活。

2. MongoDB搭建教程

2.1 下载与安装MongoDB

MongoDB 的官方网站上提供了 Windows、Linux 和 Mac OS X 平台的版本,下载地址为:https://www.mongodb.com/download-center/community

以 Windows 系统为例,下载后解压到指定的目录,比如 C:\mongodb,在命令行下转到 mongodb 的 bin 目录下(C:\mongodb\bin),输入 mongod --dbpath=d:\test\mongodb,其中 --dbpath 指定数据存储的目录。

命令栏输入,MongoDB 启动后将看到类似以下的信息:

C:\mongodb\bin>mongod --dbpath=d:\test\mongodb

2021-08-10T21:54:19.968+0800 I CONTROL [initandlisten] MongoDB starting : pid=9176 port=27017 dbpath=d:\test\mongodb 64-bit host=DESKTOP-XXXXXXX

2021-08-10T21:54:19.968+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2

2021-08-10T21:54:19.969+0800 I CONTROL [initandlisten] db version v4.4.8

2021-08-10T21:54:19.970+0800 I CONTROL [initandlisten] git version: f68a3738bdfc0ea5e0d672682f8b830a2262f33e

2021-08-10T21:54:19.970+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.1.1k 25 Mar 2021

2021-08-10T21:54:19.971+0800 I CONTROL [initandlisten] allocator: tcmalloc

2021-08-10T21:54:19.971+0800 I CONTROL [initandlisten] modules: none

2021-08-10T21:54:19.971+0800 I CONTROL [initandlisten] build environment:

...

2.2 MongoDB客户端连接

MongoDB 通过网络进行通讯,客户端可以直接通过 mongoshell 命令行工具或者 MongoDB 客户端驱动程序(如 Java、Python、.NET 等)来连接服务端。

2.3 创建数据库和集合

在 MongoDB 中,数据存储在集合(Collection)中,每个集合都有一个唯一的名称,并且可以有任意数量的文档存储在其中。

在 MongoDB 中,如果你喜欢就可以不用手动创建数据库,而是可以直接创建集合并插入文档。

2.4 MongoDB文档操作

MongoDB 的文档操作是由 MongoDB 查询语言(Query Language)和 JavaScript 语言混合而成,所以非常的直观,同时 MongoDB 支持诸如插入、查询、删除、修改等常用的操作。

3. 实现数据存储

3.1 数据库与集合的创建

在 MongoDB 中,虽然你可以不手动创建数据库和集合,但为了更好的管理数据,建议手动创建。

打开命令行工具,如果没有直接在 bin 目录运行,输入mongo命令连接到 MongoDB 服务,出现以下信息就说明连接成功了。

C:\mongodb\bin>mongo

MongoDB shell version v4.4.8

connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("9d9dd005-bb4a-481f-ba6a-3456528726c7") }

MongoDB server version: 4.4.8

Welcome to the MongoDB shell.

For interactive help, type "help".

For more comprehensive documentation, see

http://docs.mongodb.org/

Questions? Try the support group

http://groups.google.com/group/mongodb-user

>

创建数据库

> use test //创建一个名叫test的数据库

查看当前所有的数据库

> show dbs

admin 0.000GB

config 0.000GB

local 0.000GB

test 0.000GB

创建集合

> db.createCollection("user") //创建一个名叫user的集合

{ "ok" : 1 }

查看数据库的所有集合

> show collections

user

3.2 文档操作

插入文档

在 user 集合中插入一条数据

> db.user.insert({"name":"张三","age":18,"gender":"男"})

WriteResult({ "nInserted" : 1 })

在 user 集合中插入多个数据

> db.user.insert([

... {"name":"李四","age":20,"gender":"男"},

... {"name":"王五","age":25,"gender":"女"},

... {"name":"赵六","age":28,"gender":"男"}

... ])

BulkWriteResult({

"writeErrors" : [ ],

"writeConcernErrors" : [ ],

"nInserted" : 3,

"nUpserted" : 0,

"nMatched" : 0,

"nModified" : 0,

"nRemoved" : 0,

"upserted" : [ ]

})

查询文档

查询所有数据

> db.user.find()

{ "_id" : ObjectId("6112e449b3c95a68bcab7eb1"), "name" : "张三", "age" : 18, "gender" : "男" }

{ "_id" : ObjectId("6112e71cb3c95a68bcab7eb2"), "name" : "李四", "age" : 20, "gender" : "男" }

{ "_id" : ObjectId("6112e71cb3c95a68bcab7eb3"), "name" : "王五", "age" : 25, "gender" : "女" }

{ "_id" : ObjectId("6112e71cb3c95a68bcab7eb4"), "name" : "赵六", "age" : 28, "gender" : "男" }

根据条件查询

//查询名字叫'张三'的文档

> db.user.find({"name":"张三"})

{ "_id" : ObjectId("6112e449b3c95a68bcab7eb1"), "name" : "张三", "age" : 18, "gender" : "男" }

//查询年龄大于20的文档

> db.user.find({"age":{$gt:20}})

{ "_id" : ObjectId("6112e71cb3c95a68bcab7eb3"), "name" : "王五", "age" : 25, "gender" : "女" }

{ "_id" : ObjectId("6112e71cb3c95a68bcab7eb4"), "name" : "赵六", "age" : 28, "gender" : "男" }

更新文档

更新 name 为 '张三' 的文档所对应的 age 字段值为 20

> db.user.update({"name":"张三"},{$set:{"age":20}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

更新 age 大于等于 25 的文档所对应的 gender 字段值为 '保密'

> db.user.update({"age":{$gte:"25"}},{$set:{"gender":"保密"}},{multi:true})

WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

删除文档

删除 age 大于等于 25 的文档

> db.user.remove({"age":{$gte:"25"}})

WriteResult({ "nRemoved" : 2 })

3.3 MongoDB的聚合操作

聚合操作是 MongoDB 中高级查询的部分。聚合操作可以用于多项计算以及将计算结果与文档相关联。查询语言使用 MongoDB 聚合管道机制构建。

聚合操作函数包括:

$group- 将集合中的文档分组,可用于聚合操作。

$match- 过滤集合中文档,只输出符合条件的文档。

$limit- 用来限制 MongoDB 聚合管道返回的文档数。

$skip- 在聚合管道中跳过指定数量的文档,并返回余下的文档。

$sort- 将输入文档排序后输出。

$unwind- 对数组字段进行 deconstruct 操作。

$project- 修改输入文档的结构,进行重构。

举个例子:

假设现在有一个文档如下:

{"_id":1,"item":"t-shirt","size":[{"size":"S","quantity":25},{"size":"M","quantity":50},{"size":"L","quantity":75}]}

这里的 size 字段是一个数组,在我们查询的过程中,如果要精确匹配其中的某个元素,就需要先使用 $unwind 操作,把数组拆分开来,生产单独的文档。这样做的好处显然是可以更灵活地控制查询条件,而不必再担心要匹配的是数组的哪个元素。

具体的查询语句如下:

db.inventory.aggregate([

// 展开 size 数组

{$unwind: "$size"},

// 对 size 中的 quantity 字段求和

{ $group : { _id : "$item", total_quantity : { $sum : "$size.quantity" } } }

])

4. 总结

通过上面的学习,我们可以发现,MongoDB 数据库非常的灵活,可以让我们进行更加方便的数据存储和查询操作。

与关系型数据库相比,MongoDB 更加适合处理大量非结构化数据,这是其优势的一个方面。同时,MongoDB 数据库还支持分布式、负载均衡和自动故障转移等功能,这对高可用性的大型应用是非常有价值的。

数据库标签