1. MongoDB简介
MongoDB是一个开源文档数据库,为非关系型数据库。MongoDB用C++语言编写,旨在为Web应用提供可扩展、高性能、高可用性的数据存储解决方案。
MongoDB具有以下特点:
灵活的数据模型
可扩展性
高性能和高可用性
基于复制和故障转移的高可用性
自动分片
支持索引
2. 安装MongoDB
2.1 下载MongoDB
在安装MongoDB前,需要到MongoDB官网下载对应版本。下载地址:https://www.mongodb.com/download-center/community
在页面中找到对应版本并下载以后,执行以下命令解压.tar包:
tar -zxvf mongodb-linux-x86_64-4.4.1.tgz
2.2 创建配置文件
在解压后的目录下创建MongoDB配置文件,配置选项可以按需修改:
mkdir -p /data/mongodb
touch /data/mongodb/mongod.conf
vi /data/mongodb/mongod.conf
添加如下内容:
systemLog:
destination: file
path: /data/mongodb/mongodb.log
logAppend: true
storage:
dbPath: /data/mongodb/db
net:
bindIp: 0.0.0.0
port: 27017
2.3 启动MongoDB
使用以下命令启动MongoDB:
cd mongodb-linux-x86_64-4.4.1/bin/
./mongod -f /data/mongodb/mongod.conf
注意:使用后台启动可以添加--fork
选项。
3. MongoDB基本概念
3.1 集合(Collection)
集合是MongoDB中的数据存储单元。
集合是一组文档,每个文档都是一个由字段和值组成的BSON对象。MongoDB中的集合类似于关系数据库中的表,只不过它们不需要定义一个模式。
db.createCollection('person');
3.2 文档(Document)
文档是MongoDB中的基础数据单元。
文档是一个由键值对组成的BSON对象,在MongoDB中,文档可以包括嵌入式文档、数组和数组内的嵌入式文档。其类似于关系型数据库中的行。
db.person.insertMany([
{name:'Tom', age:18, gender:'male'},
{name:'Jane', age:20, gender:'female'},
{name:'Alex', age:25, gender:'male'}
]);
3.3 索引(Index)
索引是MongoDB中提高查询性能的重要手段之一。
索引能够帮助MongoDB在查询时更快地查找到匹配的文档。MongoDB支持在集合中创建单键、复合键、地理位置、全文和哈希等类型的索引。
db.person.createIndex({name:1});
3.4 引用(Reference)
引用是MongoDB中实现文档关系的一种方式。
引用可以把一个文档中的某个字段作为另一个文档的主键,从而实现文档之间的关联。
db.order.insert({
name:'订单',
person_id:ObjectId('5f75afe7be4c9ff1aad58de0')
});
db.person.insert({
_id:ObjectId('5f75afe7be4c9ff1aad58de0'),
name:'Tom',
age:18,
gender:'male'
});
4. MongoDB查询操作
4.1 插入(Insert)
插入操作可以在MongoDB中插入新的文档记录。
在MongoDB中,插入操作用于向集合中插入新的文档记录。如果没有对应的集合,MongoDB将为我们创建一个新的集合。
db.person.insert({
name:'Tom',
age:18,
gender:'male'
});
注意:如果要插入多条记录,可以使用insertMany()
方法。
4.2 更新(Update)
更新操作可以在MongoDB中更新已有的文档。
在MongoDB中,更新操作用于修改集合中已有的文档记录。我们可以使用update()
方法来更新MongoDB中的文档。
db.person.update(
{name:'Tom'},
{$set:{age:20}}
);
注意:如果要更新一条记录,可以使用updateOne()
方法,如果要更新多条记录,则使用updateMany()
方法。
4.3 删除(Delete)
删除操作可以在MongoDB中删除已有的文档。
在MongoDB中,删除操作用于删除集合中已有的文档记录。我们可以使用remove()
方法来删除MongoDB中的文档。
db.person.remove({_id:ObjectId("5f75afe7be4c9ff1aad58de0")});
注意:如果要删除一条记录,可以使用deleteOne()
方法,如果要删除多条记录,则使用deleteMany()
方法。
4.4 查询(Find)
查询操作可以在MongoDB中按照一定的条件查询文档记录。
在MongoDB中,查询操作用于按照一定的条件查找集合中符合条件的文档记录。我们可以使用find()
方法来查询MongoDB中的文档。
db.person.find({name:'Alex'});
注意:如果要查询一条记录,可以使用findOne()
方法。
5. MongoDB聚合操作
5.1 聚合(Aggregate)
聚合操作可以在MongoDB中应用一系列的聚合管道操作。
在MongoDB中,聚合操作用于应用一系列的管道操作以便处理集合中的文档记录。在聚合管道中,每个管道操作都会将输入文档从管道的上一阶段发送到下一阶段进行处理。
db.person.aggregate(
{$match:{gender:'male'}},
{$group:{_id:'gender', count:{$sum:1}}}
);
注意:聚合管道中的每个阶段都可以使用内置的聚合操作符,如$sum
、$avg
、$max
等。
5.2 地理空间(GeoSpatial)
地理空间操作可以在MongoDB中支持地理空间数据操作。
在MongoDB中,地理空间操作用于支持地理空间数据类型,并提供了一系列地理空间查询和分析操作。
db.places.find({
'location':{
$geoWithin:{
$centerSphere:[[0,0],10/3963.2]
}
}
});
注意:以上示例是查询地球上距离[0,0]
坐标10英里范围内的数据。
5.3 文本搜索(Full-text search)
文本搜索可以在MongoDB中进行全文搜索操作。
在MongoDB中,文本搜索用于实现全文搜索功能,并提供了相关的查询和索引方式。
db.article.createIndex({content:'text'});
db.article.find({$text:{$search:'java development'}});
注意:以上示例是查询包含关键词java development
的文档。
总结
本文介绍了MongoDB的安装和基本概念,以及MongoDB的常用操作和聚合操作。其中,插入、更新、删除和查询是MongoDB中最基础和最常用的操作,而聚合操作则可以对查询得到的结果进行处理和分析,从而得到更有价值的信息。