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")
相关推荐
袋鼠云数栈13 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567313 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛1392462567314 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_16 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz16 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪16 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd17 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发17 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序
寺中人17 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
这个DBA有点耶17 小时前
同样48核配置TPS差1倍?高性价比数据库一体机的“软硬协同”才是分水岭
服务器·数据库·架构