MongoDB 常用查询语法

基本查询操作

使用 find() 方法查询文档,可以传入查询条件参数:

javascript 复制代码
db.collection.find({ field: value })

查询所有文档:

javascript 复制代码
db.collection.find()
条件查询

等于条件:

javascript 复制代码
db.collection.find({ age: 25 })

不等于条件:

javascript 复制代码
db.collection.find({ age: { $ne: 25 } })

大于条件:

javascript 复制代码
db.collection.find({ age: { $gt: 25 } })

小于条件:

javascript 复制代码
db.collection.find({ age: { $lt: 25 } })

范围条件:

javascript 复制代码
db.collection.find({ age: { $gte: 20, $lte: 30 } })
逻辑查询

AND 条件:

javascript 复制代码
db.collection.find({ age: 25, name: "John" })

OR 条件:

javascript 复制代码
db.collection.find({ $or: [{ age: 25 }, { name: "John" }] })

NOT 条件:

javascript 复制代码
db.collection.find({ age: { $not: { $gt: 25 } } })
数组查询

包含元素:

javascript 复制代码
db.collection.find({ tags: "mongodb" })

精确匹配数组:

javascript 复制代码
db.collection.find({ tags: ["mongodb", "database"] })

数组大小:

javascript 复制代码
db.collection.find({ tags: { $size: 2 } })
投影查询

指定返回字段:

javascript 复制代码
db.collection.find({}, { name: 1, age: 1 })

排除字段:

javascript 复制代码
db.collection.find({}, { password: 0 })
排序和分页

排序:

javascript 复制代码
db.collection.find().sort({ age: 1 }) // 1升序,-1降序

分页:

javascript 复制代码
db.collection.find().skip(10).limit(5)
聚合查询

计数:

javascript 复制代码
db.collection.countDocuments({ age: 25 })

分组:

javascript 复制代码
db.collection.aggregate([
  { $group: { _id: "$department", total: { $sum: "$salary" } } }
])
更新操作

更新单个文档:

javascript 复制代码
db.collection.updateOne({ name: "John" }, { $set: { age: 26 } })

更新多个文档:

javascript 复制代码
db.collection.updateMany({ department: "IT" }, { $set: { bonus: 1000 } })
删除操作

删除单个文档:

javascript 复制代码
db.collection.deleteOne({ name: "John" })

删除多个文档:

javascript 复制代码
db.collection.deleteMany({ department: "HR" })
索引操作

创建索引:

以下是针对 MongoDB 聚合查询和日期操作的整理说明:

日期字符串转换与分组统计

将字符串格式的日期转换为日期对象并按天分组统计:

javascript 复制代码
db.collection.aggregate([
  {
    $project: {
      end_date: {
        $dateFromString: {
          dateString: "$结束时间",
          format: "%Y-%m-%d %H:%M:%S"
        }
      }
    }
  },
  {
    $group: {
      _id: { $dateToString: { format: "%Y-%m-%d", date: "$end_date" } },
      count: { $sum: 1 }
    }
  },
  { $sort: { _id: 1 } }
])

日期范围查询(聚合管道)

使用 $addFields 转换日期后进行范围过滤:

javascript 复制代码
db.collection.aggregate([
  {
    $addFields: {
      end_date: {
        $dateFromString: {
          dateString: "$结束时间",
          format: "%Y-%m-%d %H:%M:%S"
        }
      }
    }
  },
  {
    $match: {
      end_date: {
        $gte: ISODate("2025-08-16T00:00:00Z"),
        $lt: ISODate("2025-08-17T00:00:00Z")
      }
    }
  }
])

正则表达式匹配日期前缀

查找以特定日期开头的字符串字段:

javascript 复制代码
db.collection.find({
  结束时间: { $regex: "^2025-10-27" }
})

基于字符串的范围删除

删除字符串格式日期在指定范围内的文档:

javascript 复制代码
db.collection.deleteMany({
  结束时间: {
    $gte: "2025-10-27 00:00:00",
    $lte: "2025-10-27 23:59:59"
  }
})

原生日期类型查询

直接查询 ISODate 类型的字段:

javascript 复制代码
db.collection.find({
  结束时间: {
    $gte: ISODate("2025-08-16T00:00:00Z"),
    $lt: ISODate("2025-08-17T00:00:00Z")
  }
})

JSON 字段内容查询

在 JSON 字符串中搜索特定键值对:

javascript 复制代码
db.collection.find({
  json: {
    $regex: /"account_number"\s*:\s*"25472145652320200722"/
  }
})

字段采样检查

查看前5个文档的指定字段:

javascript 复制代码
db.collection.find({}, { "结束时间": 1 }).limit(5)

注意:

  1. 使用 $dateFromString 时需确保字符串格式与 format 参数完全匹配
  2. 字符串比较和日期类型比较的查询性能差异显著,建议存储时使用原生日期类型
  3. 正则表达式查询对性能影响较大,适合小规模数据或后台任务

查看索引:

javascript 复制代码
db.collection.getIndexes()

删除索引:

javascript 复制代码
db.collection.dropIndex("name_1")
相关推荐
Arbori_262151 分钟前
找回mysql root 密码
数据库·mysql
zlpzlpzyd2 分钟前
spring boot 4.1发布
java·数据库·spring boot
石一峰6993 分钟前
SQLite 与 db_manager 集成关键概念详解
jvm·数据库·sqlite
pigs20184 分钟前
mysql8.0 access denied for user root localhost account is locked
数据库·adb
阿里云瑶池数据库6 分钟前
从开源插件到生产级引擎:PolarDB PostgreSQL的向量能力新范式
数据库·阿里云·postgresql
tomcoding1 小时前
遇到一个ORA-01017错误,解决方法
数据库·oracle
ejinxian2 小时前
PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等数据库
数据库·mysql·mongodb
折哥的程序人生 · 物流技术专研8 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
AOwhisky8 小时前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
李白的天不白8 小时前
数据库连接报错问题
数据库