MongoDB 基本用法
概述
非关系型数据库,以类 JSON 格式存储数据,是非关系型数据库中与关系型数据库最相似的
CRUD
1. Create(插入文档)
向集合中插入新文档。
插入单个文档
db.collection.insertOne({
name: "Alice",
age: 25,
job: "Engineer"
});
插入多个文档
db.collection.insertMany([
{ name: "Bob", age: 30, job: "Designer" },
{ name: "Charlie", age: 35, job: "Manager" }
]);
2. Read(查询文档)
从集合中查询文档。
查询所有文档
db.collection.find();
查询特定条件的文档
db.collection.find({ age: { $gt: 25 } }); // 查询 age 大于 25 的文档
查询并返回特定字段
db.collection.find({}, { name: 1, job: 1 }); // 只返回 name 和 job 字段
查询单个文档
db.collection.findOne({ name: "Alice" });
使用比较运算符
db.collection.find({ age: { $gte: 25, $lte: 35 } }); // 查询 age 在 25 到 35 之间的文档
使用逻辑运算符
db.collection.find({ $or: [{ age: 25 }, { job: "Engineer" }] }); // 查询 age 为 25 或 job 为 Engineer 的文档
排序和分页
db.collection.find().sort({ age: 1 }).limit(10); // 按 age 升序排序,返回前 10 条
3. Update(更新文档)
更新集合中的文档。
更新单个文档
db.collection.updateOne(
{ name: "Alice" }, // 查询条件
{ $set: { age: 26 } } // 更新操作
);
更新多个文档
db.collection.updateMany(
{ job: "Engineer" }, // 查询条件
{ $set: { salary: 80000 } } // 更新操作
);
使用更新运算符
-
$set:设置字段值。存在字段则覆盖原有值,不存在则新建字段 -
$unset:删除字段。 -
%rename:重命名字段。 -
$inc:增加字段值。 -
$push:向数组字段添加元素。 -
$pull:从数组字段删除元素。
示例:
db.collection.updateOne(
{ name: "Alice" },
{
$inc: { age: 1 }, // 将 age 增加 1
$rename: { oldName: "newName" }, // 改名,前者可加引号,后者必须加引号
$unset: { name: "" } // 删除name字段
}
);
4. Delete(删除文档)
从集合中删除文档。
删除单个文档
db.collection.deleteOne({ name: "Alice" });
删除多个文档
db.collection.deleteMany({ age: { $lt: 30 } }); // 删除 age 小于 30 的所有文档
5. 批量操作
MongoDB 支持批量写入操作,可以一次性执行多个插入、更新或删除操作。
批量写入
db.collection.bulkWrite([
{ insertOne: { document: { name: "David", age: 28 } } },
{ updateOne: { filter: { name: "Alice" }, update: { $set: { age: 27 } } } },
{ deleteOne: { filter: { name: "Bob" } } }
]);
6. 索引操作
为了提高查询性能,可以为集合创建索引。
创建索引
db.collection.createIndex({ name: 1 }); // 在 name 字段上创建升序索引
查看索引
db.collection.getIndexes();
删除索引
db.collection.dropIndex("name_1"); // 删除 name 字段上的索引
7. 聚合操作
MongoDB 的聚合框架(Aggregation Pipeline)用于处理复杂的数据操作。
示例:按 job 分组并计算平均年龄
db.collection.aggregate([
{ $group: { _id: "$job", avgAge: { $avg: "$age" } } }
]);
8. 事务操作(适用于多文档操作)
MongoDB 支持事务,确保多个操作的原子性。
示例:使用事务
const session = db.getMongo().startSession();
session.startTransaction();
try {
const collection = session.getDatabase("test").collection("collectionName");
collection.insertOne({ name: "Eve", age: 22 });
collection.updateOne({ name: "Alice" }, { $set: { age: 26 } });
session.commitTransaction();
} catch (error) {
session.abortTransaction();
} finally {
session.endSession();
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 木素音的小站!