首页 / MongoDB 入门教程 / 查询基础

MongoDB 入门教程

查询基础

本教程共 50 篇 · 第 13 篇 · 更新于 2026-07-30 · 约 7 分钟阅读

MongoDBMongoDB 入门教程find查询条件隐式eqpretty

13. 查询基础

本节目标:学会用 find() 查数据,理解「查询条件就是文档」,以及等于比较在 MongoDB 里是默认的隐式行为。

13.1 先准备示例数据

本查询章节统一用这个 users 集合,先建好它:

db.users.insertMany([
  { _id: 1, name: "张伟", age: 28, city: "北京", tags: ["vip", "gamer"], email: "zw@ex.com" },
  { _id: 2, name: "李娜", age: 34, city: "上海", tags: ["new"],          email: "ln@ex.com" },
  { _id: 3, name: "王芳", age: 22, city: "广州", tags: ["new", "vip"],   email: "wf@ex.com" },
  { _id: 4, name: "陈强", age: 45, city: "北京", tags: ["vip"],          email: "cq@ex.com" },
  { _id: 5, name: "刘洋", age: 30, city: "上海", tags: ["gamer"],        email: "ly@ex.com" }
])

后面 14–16 章都沿用这份数据。若已清空,重新执行上面这段即可。

13.2 find() 查全部

find() 不带参数,返回集合里所有文档:

// 查全部
db.users.find()

结果默认一行压一封,长篇文档看着累。加 pretty() 格式化:

// 美化输出
db.users.find().pretty()
Tip

终端里我几乎每次都加 pretty()。内嵌文档一多,不加它根本没法读。

13.3 查询条件就是文档

这是 MongoDB 查询最核心的一点:过滤条件本身就是一个文档,写法和数据文档一模一样。

// 查 city 等于 "北京" 的用户
db.users.find({ city: "北京" })

这里 { city: "北京" } 就是一个「条件文档」。它读起来像在说:找出 city 字段等于北京的那些。

13.4 等于是隐式的

上面没写任何运算符,因为「等于」是默认的隐式行为:

// 这两句完全等价:age 等于 28
db.users.find({ age: 28 })
db.users.find({ age: { $eq: 28 } })

$eq 是显式写法。大多数时候用隐式就够了,代码更短。

13.5 什么时候用显式 $eq

隐式写法在「顶层字段」很好用,但碰到嵌套或数组时要靠运算符:

// 内嵌文档里用 $eq 更清晰
db.users.find({ "address.city": { $eq: "北京" } })

另外在「和别的条件组合」「和 $not 取反」时,也得显式写出来(见逻辑运算符章节)。

13.6 findOne 查一条

只想要第一条匹配,用 findOne

// 返回第一条 age=30 的文档(不是游标)
db.users.findOne({ age: 30 })
Warning

find() 返回的是游标(cursor),可以接着 .limit().sort()findOne() 直接返回文档对象。新手常把两者混用导致报错。

13.7 小结

查询的三件事记住就好:

  • 条件是个文档,字段值写为谁就是「等于谁」。
  • 等于是隐式默认,大多数情况不用写 $eq
  • pretty() 让输出可读,查询练习时加上它。