1. MongoDB的介绍
MongoDB是一个非关系型数据库,它是面向文档的数据库,它将数据存储为一个个文档,而不是存储在表中的行。因此,MongoDB包含了NoSQL的思想,同时支持动态查询,全文索引和图形查询等一些传统数据库中所不具备的功能。MongoDB运行速度较快,因为它是采用BSON存储格式,这种格式很容易与编程语言之间进行交互。另外,MongoDB在集群环境中表现良好,它能够自动将数据划分成多个块,实现负载平衡。
2. MongoDB的安装
2.1 下载MongoDB
MongoDB官网提供了免费下载,可在官网下载适合自己操作系统的版本。在下载时,要特别注意版本是否与自己操作系统的版本匹配。
//以windows为例,下载windows版本
https://www.mongodb.com/try/download/community
2.2 安装MongoDB
下载后,进入下载文件夹并运行exe文件即可开始安装。在安装过程中,需选择组件和安装路径。一般默认配置即可。
3. MongoDB的基础知识
3.1 数据库和集合
在MongoDB中,一个数据库可以包含多个集合,每个集合都是一个文档集合。例如:
//连接到vaadb数据库
use vaadb;
// 创建集合
db.createCollection("mycollection");
其中,use vaadb; 命令将切换至名为vaadb的数据库,db.createCollection("mycollection")命令创建了名为mycollection的集合。
3.2 插入文档
要在集合中插入文档,可以使用db.collection.insert()命令。例如:
db.mycollection.insert({
"name": "vaalib",
"age": "18",
"address": {
"city": "beijing",
"area": "haidian"
}
})
其中,db.mycollection表示使用mycollection集合,insert({...})表示在该集合中插入一个文档。该文档包括name,age和address三个字段。address又包括一个city字段和一个area字段。
3.3 查询文档
要查询文档,可以使用db.collection.find()命令。例如:
//查询所有文档:
db.mycollection.find();
//查询age为18的文档:
db.mycollection.find({"age": "18"});
//只显示name和age字段:
db.mycollection.find({}, {"name": 1, "age": 1});
其中,db.mycollection表示使用mycollection集合,find()表示查询该集合中的所有文档。{"age": "18"}表示查询age字段的值为18的文档。{"name": 1, "age": 1}表示只查询name和age字段。
3.4 更新文档
要更新文档,可以使用db.collection.update()命令。例如:
//将name为vaalib的文档的age字段修改为20:
db.mycollection.update({"name": "vaalib"}, {"$set": {"age": "20"}});
其中,db.mycollection表示使用mycollection集合,update()表示更新该集合中的文档。{"name": "vaalib"} 表示查询name字段的值为vaalib的文档。{"$set": {"age": "20"}}表示将该文档的age字段修改为20。
3.5 删除文档
要删除文档,可以使用db.collection.remove()命令。例如:
//删除name为vaalib的文档:
db.mycollection.remove({"name": "vaalib"});
其中,db.mycollection表示使用mycollection集合,remove()表示删除该集合中的文档。{"name": "vaalib"}表示查询name字段的值为vaalib的文档。
4. MongoDB的高级操作
4.1 聚合操作
聚合操作是指从多个文档中获取决策有利于业务的信息。MongoDB提供了丰富的聚合操作。例如:
//统计mycollection集合中文档数量:
db.mycollection.count();
//计算mycollection集合中age总和:
db.mycollection.aggregate([{"$group": {"_id": "null", "ageTotal": {"$sum": "$age"}}}]);
其中,count()是计算文档数;aggregate()用于聚合操作。"$group"表明按某些字段分组,"_id": "null"表示不分组。"$sum": "$age"表示对所有文档中的age字段求和。
4.2 索引操作
索引是指表中一个字段的值与具体记录之间的一种对应关系。MongoDB支持多种类型的索引。例如:
//在mycollection集合中对name字段建立索引:
db.mycollection.createIndex({"name": 1});
其中,“name”: 1即表示表示name字段作为索引。MongoDB默认建立B-tree索引,支持复合索引,即一个表中建立多个字段组合的索引。
4.3 分组操作
分组操作是指将指定条件下相同的数据分组,并可以某一字段进行统计。例如:
//按city字段分组,并统计各城市文档数:
db.mycollection.aggregate([{"$group": {"_id": "$address.city", "count": {"$sum": 1}}}]);
其中,"$address.city"表示取文档中address字段下的city字段值。"_id": "$address.city"表示按city字段进行分组,"count": {"$sum": 1}表示对各组(各城市)的文档数求和。
4.4 备份和还原
备份和还原是数据库管理中非常重要的操作。MongoDB提供了mongodump和mongorestore两个工具,以备份和还原数据。例如:
//备份mydb数据库到指定目录:
mongodump -d mydb -o D:\backup\
//从指定目录还原mydb数据库:
mongorestore -d mydb D:\backup\mydb
其中,-d表示指定备份的数据库名称,-o表示指定备份输出的目录。-d表示指定目标数据库的名称,其中D:\backup\mydb为备份数据存放的目录。
5. 总结
MongoDB是一款非常好用的数据库,它不仅包含了NoSQL的思想,还支持动态查询、全文索引和图形查询等一些传统数据库中不具备的功能。
MongoDB的安装和操作对于初学者而言可能有一定难度,但掌握了基础知识后,就能够轻松使用各种高级操作。