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")
相关推荐
静听山水5 小时前
StarRocks导入数据【Stream Load】
数据库
藦卡机器人5 小时前
国产机械臂做的比较好的品牌有哪些?
大数据·数据库·人工智能
jiunian_cn5 小时前
【Redis】数据库管理操作
数据库·redis·缓存
_Johnny_6 小时前
ETCD 配额/空间告警模拟方案
网络·数据库·etcd
猫头虎6 小时前
基于信创openEuler系统安装部署OpenTeleDB开源数据库的实战教程
数据库·redis·sql·mysql·开源·nosql·database
爬山算法6 小时前
MongoDB(1)什么是MongoDB?
数据库·mongodb
Nandeska6 小时前
17、MySQL InnoDB ReplicaSet
数据库·mysql
AI_56786 小时前
SQL性能优化全景指南:从量子执行计划到自适应索引的终极实践
数据库·人工智能·学习·adb
数据知道6 小时前
PostgreSQL 性能优化:分区表实战
数据库·postgresql·性能优化