MongoDB数据库实战项目与最佳实践
一、MongoDB基础
1. MongoDB简介与历史
MongoDB是一种基于分布式文件存储的开源数据库系统,由10gen(现更名为MongoDB Inc.)在2007年开始开发,于2009年首次发布。它属于NoSQL数据库的一种,特别设计用于处理大规模数据集,提供高性能和高可用性。MongoDB使用JSON-like的文档来存储数据,这种数据模型非常适合于存储复杂的数据类型,如嵌套文档和数组,使得数据的表示更加灵活和直观。
2. 安装与配置MongoDB
2.1 安装MongoDB
在Linux系统上安装MongoDB,可以使用包管理器。以Ubuntu为例,首先添加MongoDB的官方AP仓库:
```bash
# 更新系统包列表
sudo apt-get update
# 安装MongoDB
sudo apt-get install mongodb
```
安装完成后,启动MongoDB服务:
```bash
sudo systemctl start mongod
```
2.2 配置MongoDB
MongoDB默认监听在本地的27017端口。为了安全起见,可以配置防火墙只允许特定的IP访问。在/etc/mongod.conf文件中,可以修改网络监听的地址:
```yaml
net:
port: 27017
bindIp: 0.0.0.0
```
其中0.0.0.0是允许访问的IP地址。
3. 基本数据模型与操作
MongoDB的数据模型基于文档,每个文档都是一个JSON-like的对象,存储在集合(Collection)中。集合类似于关系型数据库中的表,但没有固定的模式,这意味着同一个集合中的不同文档可以有不同的字段。
3.1 插入文档
使用mongo命令行工具插入文档到test数据库的users集合中:
```bash
# 连接到MongoDB
mongo
# 切换到test数据库
use test
# 插入文档
db.users.insert({name: "张三", age: 30, email: "zhangsan@example.com"})
```
3.2 查询文档
查询users集合中所有文档:
```javascript
db.users.find()
```
查询特定条件的文档,例如查找年龄大于25岁的用户:
```javascript
db.users.find({age: {$gt: 25}})
```
3.3 更新文档
以下是重构后的内容:
更新users集合中第一个年龄为30的用户,将其年龄改为31:
```javascript
db.users.update({age:30},{$set:{age:31}},false,true)
```
删除文档(删除users集合中年龄为31的用户):
```javascript
db.users.remove({age:31})
```
查询语言基础
MongoDB的查询语言强大且灵活,支持复杂的查询操作。
4.1等值查询等值查询
查找users集合中名字为“张三”的用户:
```javascript
db.users.find({name:张三})
```
4.2范围查询范围查询
查找年龄在20到30之间的用户:
```javascript
db.users.find({age:{$gte:20,$lte:30}})
```
4.3排序查询排序查询
按年龄升序查找用户:
```javascript
db.users.find().sort({age:1})
```
按年龄降序查找用户:
```javascript
db.users.find().sort({age:-1})
```
4.4限制查询结果限制查询结果只返回前5个结果:
```javascript
db.users.find().limit(5)
```
4.5聚合查询聚合查询使用聚合框架来计算每个年龄的用户数量:
```javascript
db.users.aggregate([
{$group:{_id:$age,count:{$sum:1}}}
])
```