Skip to content

基础语法

数据库操作

查看数据库

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 })

下一步学习