在现代软件开发领域中,数据库管理理应是一个基础而重要的技能。本文将重点介绍一个流行的NoSQL数据库MongoDB,并探究在其中管理数据库的基础技能。
1. MongoDB 的简介和基础概念
MongoDB是一个高性能、可扩展的开源NoSQL数据库,同时也是文档数据库中的佼佼者。MongoDB适用于存储大规模无结构化或半结构化的数据,它使用JSON-style的文档(BSON格式)来存储数据,保留了相关文档结构。MongoDB使用单文档模型,可同时处理多个有意义的存储模式。这类数据库是面向文档的,与基于行、列或表的SQL数据库有很大不同。
1.1 集合和文档
在MongoDB中,数据储存在集合中。集合是文档的容器,文档是集合中协同工作的实体。MongoDB文档是一个JSON形式的数据记录,可嵌套复杂的数据结构,并提示一个通用的BSON格式。以下代码创建一个名为mycollection的集合:
db.createCollection("mycollection")
使用以下命令插入一个文档记录(即一条数据)至集合中:
db.mycollection.insertOne({"name": "John Smith", "age": 30})
1.2 文档键值对和数组
在一个MongoDB文档中,使用键值对来存储数据,如:
{ key1 : value1, key2 : value2, ..., keyN : valueN }
文档亦可包含数组和嵌套文档。如下所示,students是一个文档中的一个子文档:
{
course: "MongoDB for Developers",
students: [
{
name: "Alice",
address: "101 Main street",
phone: "111-111-1111" },
{
name: "Bob",
address: "102 Main street",
phone: "222-222-2222"
},
{
name: "Cathy",
address: "103 Main street",
phone: "333-3333-3333"
}
]
}
2. 建立和查询文档
2.1 建立新文档和文档更新
向一个集合插入新文档,使用insertOne()命令:
db.mycollection.insertOne({"name": "Alice", "age": 25})
然后通过查询文档来检索文档:
db.mycollection.findOne()
若想要更新现有文档,则可使用updateOne()命令:
db.mycollection.updateOne({"_id": ObjectId("541618646a2f3dda3aebd174")}, {$set: {"age": 26}})
请注意,ObjectId("....")是MongoDB自动生成的ID。
2.2 查找文档
使用find()查询文档,如下所示:
db.mycollection.find()
这将会输出所有找到的文档,也就是我们插入集合中的所有数据。
find()可使用作为查询选项的参数:
db.mycollection.find({"age": 30})
这将仅返回年龄等于30的文档。还可以使用and和or运算符来编写更复杂的查询指令。
3. 管理MongoDB集合
在MongoDB中,使用以下命令创建和删除集合:
db.createCollection("mycollection")
db.mycollection.drop()
重命名集合使用renameCollection()命令:
db.mycollection.renameCollection("mycollection2")
3.1 索引
为一个集合添加索引,可使用createIndex()命令:
db.mycollection.createIndex({"name": 1})
这将为名为"name"的字段添加一个升序(1)索引。
使用以下命令遍历集合中的所有索引:
db.mycollection.getIndexes()
3.2 聚合查询
聚合查询让您能够运行复杂的查询,以及查询文档内嵌的数组:
db.mycollection.aggregate([
{$match: {"state": "CA"}},
{$group: {"_id": "$city", "total": {$sum: 1}}}
])
该查询将仅会返回位于"CA"州的文档,并计算它们在每个城市的总数。
结语
这篇教程讲述了MongoDB的基本概念,以及如何创建及查询文档,管理集合。
随着NoSQL数据库在应用程序中的广泛使用,能够熟练掌握MongoDB的基本技能将变得越来越重要,本文仅是MongoDB基础学习入门,若要深入了解,请务必查看相关的官方文档。