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")
]
}
});
```