// 查询集合中的所有文档
db.users.find()
// 格式化输出
db.users.find().pretty()
// 查询结果是游标(cursor),可以迭代
// 返回第一个匹配的文档
db.users.findOne()
// 查询特定条件的第一个文档
db.users.findOne({ name: "张三" })
// 精确匹配
db.users.find({ age: 25 })
// 多个条件(AND关系)
db.users.find({
age: 25,
city: "北京"
})
// 查询嵌套字段
db.users.find({
"address.city": "北京"
})
指定返回哪些字段:
// 只返回name和age字段(_id默认返回)
db.users.find({}, { name: 1, age: 1 })
// 排除_id字段
db.users.find({}, { name: 1, age: 1, _id: 0 })
// 排除某些字段
db.users.find({}, { password: 0, email: 0 })
不能同时使用包含和排除(_id除外),要么指定包含的字段,要么指定排除的字段。
// 限制返回5条记录
db.users.find().limit(5)
// 跳过前10条,返回接下来的5条
db.users.find().skip(10).limit(5)
// 分页查询示例(第3页,每页10条)
const page = 3;
const pageSize = 10;
db.users.find()
.skip((page - 1) * pageSize)
.limit(pageSize)
// 按age升序排序
db.users.find().sort({ age: 1 })
// 按age降序排序
db.users.find().sort({ age: -1 })
// 多字段排序(先按age降序,再按name升序)
db.users.find().sort({ age: -1, name: 1 })
// 统计文档数量
db.users.countDocuments()
// 统计符合条件的文档数量
db.users.countDocuments({ age: { $gte: 18 } })
// 估算文档数量(更快但不精确)
db.users.estimatedDocumentCount()
// 获取age字段的所有不同值
db.users.distinct("age")
// 获取符合条件的不同值
db.users.distinct("city", { age: { $gte: 18 } })
// 组合多个查询方法
db.users.find({ age: { $gte: 18 } })
.sort({ age: -1 })
.skip(10)
.limit(5)
.projection({ name: 1, age: 1 })
// 执行顺序:sort -> skip -> limit(与书写顺序无关)
// 查询数组包含特定值
db.users.find({ hobbies: "读书" })
// 查询数组包含多个值(任意一个匹配)
db.users.find({ hobbies: { $in: ["读书", "旅游"] } })
// 查询数组完全匹配
db.users.find({ hobbies: ["读书", "旅游"] }) // 顺序和数量必须完全一致
// 电商系统商品查询
use ecommerce
// 查询价格在100-500之间的商品,按价格升序
db.products.find({
price: { $gte: 100, $lte: 500 },
stock: { $gt: 0 }
})
.sort({ price: 1 })
.limit(20)
// 查询特定分类的商品名称和价格
db.products.find(
{ category: "电子产品" },
{ name: 1, price: 1, _id: 0 }
)
// 分页查询用户订单
db.orders.find({ userId: "user123" })
.sort({ createdAt: -1 })
.skip(0)
.limit(10)