Appearance
基础语法
数据库操作
查看数据库
javascript
show dbs
show databases切换数据库
javascript
use mydb查看当前数据库
javascript
db;删除数据库
javascript
use mydb
db.dropDatabase()集合操作
创建集合
javascript
db.createCollection("users");
db.createCollection("logs", { capped: true, size: 5242880, max: 5000 });查看集合
javascript
show collections
show tables删除集合
javascript
db.users.drop();文档操作 (CRUD)
插入文档
insertOne
javascript
db.users.insertOne({
name: "张三",
age: 25,
email: "zhangsan@example.com",
});insertMany
javascript
db.users.insertMany([
{ name: "李四", age: 28, email: "lisi@example.com" },
{ name: "王五", age: 30, email: "wangwu@example.com" },
]);insert
javascript
db.users.insert({ name: "赵六", age: 22 });查询文档
基本查询
javascript
db.users.find();
db.users.findOne();
db.users.find({ age: 25 });
db.users.find({ age: { $gt: 20 } });指定字段
javascript
db.users.find({}, { name: 1, age: 1, _id: 0 });格式化输出
javascript
db.users.find().pretty();限制结果
javascript
db.users.find().limit(10);
db.users.find().skip(5);
db.users.find().limit(10).skip(5);排序
javascript
db.users.find().sort({ age: 1 });
db.users.find().sort({ age: -1 });
db.users.find().sort({ age: -1, name: 1 });计数
javascript
db.users.countDocuments();
db.users.countDocuments({ age: { $gt: 20 } });
db.users.estimatedDocumentCount();更新文档
updateOne
javascript
db.users.updateOne({ name: "张三" }, { $set: { age: 26 } });updateMany
javascript
db.users.updateMany({ age: { $lt: 20 } }, { $set: { status: "minor" } });replaceOne
javascript
db.users.replaceOne({ name: "张三" }, { name: "张三", age: 26, city: "北京" });更新操作符
| 操作符 | 说明 |
|---|---|
| $set | 设置字段值 |
| $unset | 删除字段 |
| $inc | 增加数值 |
| $mul | 乘以数值 |
| $rename | 重命名字段 |
| $setOnInsert | 插入时设置值 |
| $push | 添加数组元素 |
| $pull | 删除数组元素 |
| $addToSet | 添加唯一元素 |
javascript
db.users.updateOne(
{ name: "张三" },
{
$set: { email: "new@example.com" },
$inc: { age: 1 },
$push: { tags: "vip" },
},
);删除文档
deleteOne
javascript
db.users.deleteOne({ name: "张三" });deleteMany
javascript
db.users.deleteMany({ age: { $lt: 18 } });
db.users.deleteMany({});remove
javascript
db.users.remove({ name: "张三" });
db.users.remove({ name: "张三" }, true);查询操作符
比较操作符
| 操作符 | 说明 |
|---|---|
| $eq | 等于 |
| $ne | 不等于 |
| $gt | 大于 |
| $gte | 大于等于 |
| $lt | 小于 |
| $lte | 小于等于 |
| $in | 在列表中 |
| $nin | 不在列表中 |
javascript
db.users.find({ age: { $eq: 25 } });
db.users.find({ age: { $gt: 20, $lt: 30 } });
db.users.find({ age: { $in: [20, 25, 30] } });
db.users.find({ age: { $nin: [20, 25, 30] } });逻辑操作符
| 操作符 | 说明 |
|---|---|
| $and | 与 |
| $or | 或 |
| $not | 非 |
| $nor | 或非 |
javascript
db.users.find({ $and: [{ age: { $gt: 20 } }, { age: { $lt: 30 } }] });
db.users.find({ $or: [{ age: { $lt: 20 } }, { age: { $gt: 50 } }] });
db.users.find({ age: { $not: { $gt: 30 } } });元素操作符
| 操作符 | 说明 |
|---|---|
| $exists | 字段是否存在 |
| $type | 字段类型 |
javascript
db.users.find({ email: { $exists: true } });
db.users.find({ age: { $type: "number" } });数组操作符
| 操作符 | 说明 |
|---|---|
| $all | 包含所有元素 |
| $elemMatch | 匹配数组元素 |
| $size | 数组长度 |
javascript
db.users.find({ tags: { $all: ["tech", "life"] } });
db.users.find({ scores: { $elemMatch: { $gt: 80, $lt: 90 } } });
db.users.find({ tags: { $size: 3 } });正则表达式
javascript
db.users.find({ name: /^张/ });
db.users.find({ name: { $regex: /^张/, $options: "i" } });聚合管道
基本 aggregate
javascript
db.users.aggregate([
{ $match: { age: { $gt: 20 } } },
{ $group: { _id: "$city", count: { $sum: 1 } } },
]);常用阶段
| 阶段 | 说明 |
|---|---|
| $match | 过滤文档 |
| $group | 分组 |
| $project | 投影 |
| $sort | 排序 |
| $limit | 限制 |
| $skip | 跳过 |
| $unwind | 展开数组 |
| $lookup | 关联查询 |
| $addFields | 添加字段 |
示例
分组统计
javascript
db.orders.aggregate([
{ $group: { _id: "$status", total: { $sum: "$amount" } } },
]);投影
javascript
db.users.aggregate([{ $project: { name: 1, email: 1, _id: 0 } }]);排序和分页
javascript
db.users.aggregate([{ $sort: { age: -1 } }, { $skip: 0 }, { $limit: 10 }]);关联查询
javascript
db.orders.aggregate([
{
$lookup: {
from: "users",
localField: "user_id",
foreignField: "_id",
as: "user",
},
},
]);展开数组
javascript
db.users.aggregate([{ $unwind: "$tags" }]);批量写入
bulkWrite
javascript
db.users.bulkWrite([
{ insertOne: { document: { name: "用户A", age: 20 } } },
{ updateOne: { filter: { name: "张三" }, update: { $set: { age: 26 } } } },
{ deleteOne: { filter: { name: "李四" } } },
]);有序与无序
javascript
db.users.bulkWrite([...], { ordered: false })