MongoDB教程
MongoDB 简介
MongoDB 安装与配置
MongoDB 的基本概念
MongoDB 数据库与集合操作
MongoDB CRUD 操作详解
MongoDB 高级查询
MongoDB索引与性能优化
MongoDB 聚合框架详解
MongoDB 复制集与分片
MongoDB 备份与恢复
MongoDB 安全与用户管理
MongoDB 性能优化与最佳实践
MongoDB 常见问题排查
-
+
首页
MongoDB CRUD 操作详解
以下是对 MongoDB CRUD 操作的详细讲解: ### **插入文档** 1. **`insert()` 方法**: - 用于向集合中插入一条或多条文档。 - 示例:插入一条文档 ```javascript db.mycollection.insert({ name: "Alice", age: 25 }) ``` - 插入多条文档 ```javascript db.mycollection.insert([ { name: "Bob", age: 30 }, { name: "Charlie", age: 35 } ]) ``` - **注意**:如果集合不存在,MongoDB 会自动创建集合。 2. **`save()` 方法**: - 用于插入或更新文档。 - 示例: ```javascript db.mycollection.save({ _id: 1, name: "David", age: 40 }) ``` - 如果指定的 `_id` 已存在,则更新文档;否则插入新文档。 - 不推荐使用,已废弃。 ### **查询文档** 1. **`find()` 方法**: - 用于查询集合中的文档。 - 示例:查询所有文档 ```javascript db.mycollection.find() ``` - 查询特定条件的文档 ```javascript db.mycollection.find({ age: 25 }) ``` - 使用 `_id` 查询 ```javascript db.mycollection.find({ _id: ObjectId("507c7f7e310c9850108b42f5") }) ``` 2. **投影(Projection)**: - 控制返回结果的字段。 - 示例:只返回 `name` 和 `age` 字段 ```javascript db.mycollection.find({}, { name: 1, age: 1, _id: 0 }) ``` 3. **查询条件** - MongoDB 提供多种查询条件运算符,如 `$eq`、`$ne`、`$gt`、`$lt`、`$in`、`$nin`、`$and`、`$or` 等。 - 示例:年龄大于 30 的文档 ```javascript db.mycollection.find({ age: { $gt: 30 } }) ``` 4. **排序** - 使用 `sort()` 方法对查询结果进行排序。 - 示例:按年龄升序排序 ```javascript db.mycollection.find().sort({ age: 1 }) ``` - 参数 `1` 表示升序,`-1` 表示降序。 5. **限制返回结果数量** - 使用 `limit()` 方法限制返回的文档数量。 - 示例:返回前 2 条文档 ```javascript db.mycollection.find().limit(2) ``` 6. **跳过文档** - 使用 `skip()` 方法跳过指定数量的文档。 - 示例:跳过前 2 条文档,返回之后的 3 条 ```javascript db.mycollection.find().skip(2).limit(3) ``` 7. **`findOne()` 方法**: - 返回查询结果中的第一条文档。 - 示例: ```javascript db.mycollection.findOne({ name: "Alice" }) ``` ### **更新文档** 1. **`update()` 方法**: - 用于更新文档。 - 示例:更新单个文档 ```javascript db.mycollection.update( { name: "Alice" }, { $set: { age: 30 } } ) ``` - 参数:第一个参数是查询条件,第二个参数是更新操作。 - 常用的更新操作符有 `$set`、`$inc`、`$push` 等。 - 示例:增加年龄 ```javascript db.mycollection.update( { name: "Bob" }, { $inc: { age: 1 } } ) ``` - 如果需要更新多个文档,可以使用 `multi: true` 参数: ```javascript db.mycollection.update( { age: { $lt: 30 } }, { $set: { isAdult: true } }, { multi: true } ) ``` 2. **`replaceOne()` 和 `updateOne()`**: - **`replaceOne()`**:替换整个文档。 - **`updateOne()`**:更新文档的部分内容。 - 示例(`replaceOne()`): ```javascript db.mycollection.replaceOne( { name: "Charlie" }, { name: "Charlotte", age: 40 } ) ``` 3. **使用 `findOneAndUpdate()` 方法**: - 在更新文档的同时返回更新后的文档。 - 示例: ```javascript db.mycollection.findOneAndUpdate( { name: "David" }, { $set: { age: 45 } }, { returnOriginal: false } ) ``` ### **删除文档** 1. **`remove()` 方法**: - 用于删除文档。 - 示例:删除单个文档 ```javascript db.mycollection.remove({ name: "Alice" }) ``` - 参数可以包含查询条件,也可以为空(删除所有文档)。 - 如果需要删除多个文档,可以使用 `justOne: false` 参数: ```javascript db.mycollection.remove( { age: { $gt: 30 } }, { justOne: false } ) ``` 2. **`deleteOne()` 和 `deleteMany()`**: - **`deleteOne()`**:删除匹配的第一个文档。 - **`deleteMany()`**:删除所有匹配的文档。 - 示例(`deleteOne()`): ```javascript db.mycollection.deleteOne({ name: "Bob" }) ``` - 示例(`deleteMany()`): ```javascript db.mycollection.deleteMany({ age: { $lt: 25 } }) ``` ### **索引操作** 1. **创建索引**: - 使用 `createIndex()` 方法创建索引。 - 示例:为 `name` 字段创建索引 ```javascript db.mycollection.createIndex({ name: 1 }) ``` - 参数 `1` 表示升序索引,`-1` 表示降序索引。 2. **查看索引**: - 使用 `getIndexes()` 方法查看集合的索引。 - 示例: ```javascript db.mycollection.getIndexes() ``` 3. **删除索引**: - 使用 `dropIndex()` 方法删除索引。 - 示例: ```javascript db.mycollection.dropIndex({ name: 1 }) ``` ### **聚合操作** MongoDB 的聚合框架允许你对数据进行复杂的操作,如分组、排序、过滤和计算。 1. **`aggregate()` 方法**: - 示例:计算每个年龄组的人数 ```javascript db.mycollection.aggregate([ { $group: { _id: "$age", count: { $sum: 1 } } } ]) ``` ### **数据类型** MongoDB 支持多种数据类型,包括: - **字符串**:`String` - **数字**:`Number`(分 `NumberInt` 和 `NumberLong`) - **布尔值**:`Boolean` - **日期**:`Date` - **数组**:`Array` - **对象**:`Object` - **二进制数据**:`BinData` - **`null`**:`null` - **`undefined`**:不推荐使用,可以使用 `null` 替代 ### **项目实战** 假设你正在开发一个电商网站,需要存储商品信息。以下是使用 MongoDB存储商品数据的示例: #### **商品文档结构** ```json { "_id": ObjectId("64c5f1c7c2b5d3b5d3b5d3b5"), "name": "Apple iPhone 13 Pro", "price": 999, "stock": 100, "category": "Electronics", "description": "Apple iPhone 13 Pro with A15 Bionic chip...", "ratings": [ { "userId": "user1", "rating": 4 }, { "userId": "user2", "rating": 5 } ], "created_at": ISODate("2024-07-28T12:00:00Z") } ``` #### **CRUD 操作示例** 1. **插入商品** ```javascript db.products.insert({ name: "Samsung Galaxy S21", price: 899, stock: 150, category: "Electronics", description: "Samsung Galaxy S21 with advanced camera...", created_at: new Date() }) ``` 2. **查询商品** - 按价格查询 ```javascript db.products.find({ price: { $lt: 1000 } }) ``` - 按类别查询 ```javascript db.products.find({ category: "Electronics" }) ``` 3. **更新商品库存** ```javascript db.products.update( { name: "Samsung Galaxy S21" }, { $inc: { stock: -1 } } ) ``` 4. **删除商品** ```javascript db.products.deleteOne({ name: "Apple iPhone 13 Pro" }) ``` ### **性能优化** - **索引优化**:为经常查询的字段创建索引。 - **数据分片**:将数据分布在多个服务器上,提高查询性能。 - **合理设计文档结构**:避免嵌套过深的文档结构。 - **使用连接池**:在应用中使用连接池,减少连接开销。 通过掌握这些 MongoDB 的基本操作,你可以高效地管理和操作数据,为你的应用程序提供强大的数据支持。
wwbang
2025年2月27日 14:28
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码