MongoDB基础操作教程

## 一、缘起

在进行后台项目的测试联调过程中,我遇到了一个问题:如何查询MongoDB中的数据并计算验证数据的结果。由于当时我对MongoDB的数据操作并不熟悉,于是我请教了有经验的同事。在得到他们的帮助后,我开始学习MongoDB,从最基本的CRUD(创建、读取、更新、删除)操作开始。现在,我想将这段学习过程分享给大家,希望能帮助到更多有需要的开发者。

## 二、CRUD操作

### 2.1 新建

首先,我们需要了解如何在MongoDB中新建数据库和集合。

### 2.1.1 新建数据库

使用`use`命令选择一个新的数据库,格式如下:

```sql

use database-name;

```

例如,我们要创建一个名为"tutorial"的数据库,可以执行以下命令:

```sql

use tutorial;

```

如果数据库不存在,系统会自动创建。如果数据库已存在,则会切换到该数据库。

### 2.1.2 新建数据

接下来,我们来了解如何在MongoDB中插入数据。可以使用`insertOne()`或`insertMany()`方法来插入单条或多条数据。这里以插入单条数据为例:

```javascript

db.user.insertOne({"age": 10, "createdTime": new Date().valueOf(), "money": 100, "sex": "male", "uid": "0x0001", "username": "xiaoyi"});

```

如果要插入多条数据,可以使用以下两种方法:

* 插入单条数据的多个实例:

```javascript

db.user.insertMany([{age: 10, createdTime: new Date().valueOf(), money: 100, sex: "male", uid: "0x0001", username: "xiaoyi"}, {age: 20, createdTime: new Date().valueOf(), money: 200, sex: "female", uid: "0x0002", username: "xiaoyi_2"}]);

```

* 一次性插入多条数据:

```javascript

db.user.insertMany([{age: 10, createdTime: new Date().valueOf(), money: 100, sex: "male", uid: "0x0001", username: "xiaoyi"}}); db.user.insertMany([{age: 20, createdTime: new Date().valueOf(), money: 200, sex: "female", uid: "0x0002", username: "xiaoyi_2"}]);

```

以下是重构后的内容:

## 2.1 插入数据

```javascript

db.user.insertMany([{

"age": 10,

"createdTime": new Date().valueOf(),

"money": Double(100),

"sex": "male",

"uid": "0x0007",

"username": "xiaoqi"

}, {

"age": 10,

"createdTime": new Date().valueOf(),

"money": Double(100),

"sex": "male",

"uid": "0x0008",

"username": "xiaoba"

}]);

```

## 2.2 查询数据

### 2.2.1 操作符

| 序号 | 操作符 | 描述 |

| --- | --- | --- |

| 1 | lt | <小于 |

| 2 | gt | >大于 |

| 3 | lte | <=小于等于 |

| 4 | gte | >=大于等于 |

### 2.2.2 查询所有数据

```javascript

db.user.find();

```

### 2.2.3 查询指定条件的数据

```javascript

db.user.find({uid: '0x0002'}); // 或者 db.user.find({age: {$gt: 11}});

```

### 2.2.4 聚合查询

```javascript

db.user.aggregate([{$match: {age: {$gte: 11}}}, {$group: {_id: "$sex", totalMoney: {$sum: "$money"}}}]);

```

## 2.3 更新数据

### 2.3.1 更新单条数据

```javascript

db.collection_name.updateOne({搜索条件}, {更新数据操作}); // 或者 db.collection_name.updateMany({搜索条件}, {更新数据操作});

```

.3.1 更新单条数据将id为"647c4ea010d72b63acb01301"的用户的年龄设置为10,创建时间设置为1685868192340毫秒,金额设置为100,性别设置为男,用户ID设置为"0x0001",用户名设置为"xiaoyi":

```javascript

db.user.updateOne({ _id: ObjectId("647c4ea010d72b63acb01301") }, {$set: { "age": 10, "createdTime": Long("1685868192340"), "money": Double(100), "sex": "male", "uid": "0x0001", "username": "xiaoyi" } });

```

2.3.2 更新多条数据

将年龄大于10的用户的钱数设置为10:

```javascript

db.user.updateMany({ age: {$gt: 10} }, {$set: { "money": Double(10) } });

```

将年龄大于10的用户的钱数增加10:

```javascript

db.user.updateMany({ age: {$gt: 10} }, {$inc: { "money": Double(10) } });

```

2.4 删除

2.4.1 删除数据库

格式:

```javascript

use database_name; db.dropDatabase();

```

2.4.2 删除数据

格式:

# 删除所有数据 db.collection_name.deleteMany({}); # 删除所有数据 db.collection_name.drop(); # 删除特定数据 db.collection_name.deleteOne({field_name: value}); # 删除多条数据 db.collection_name.deleteMany({field_name: value});

2.4.1 删除单条数据

```javascript

db.user.deleteOne({_id:ObjectId("647c4e5e10d72b63acb01300")});

```

2.4.2 删除多条数据

要删除多个文档,可以使用 `deleteMany` 方法。根据提供的内容,我们可以重构如下:

```javascript

db.user.deleteMany({

_id: {

$in: [

ObjectId("647c685810d72b63acb01308"),

ObjectId("647c666410d72b63acb01307"),

ObjectId("647c685810d72b63acb01309")

]

}

});

```