MongoDB Compass中MONGOSH常用查询整理

发布于:2025-03-01 ⋅ 阅读:(153) ⋅ 点赞:(0)

MongoDB Compass 是一款可视化的 MongoDB 数据库管理工具,其中的 MongoSH(MongoDB Shell)提供了丰富的指令用于查找数据

选择数据库

例如,选择名为 testdb 的数据库:

use testdb

基本的查找指令

find() 方法

find() 方法用于从集合中查询文档,可接受一个查询条件作为参数,若不传递参数,则返回集合中的所有文档

  • 返回集合中的所有文档
db.yourCollectionName.find()

例如,查询 users 集合中的所有文档:

db.users.find()

此命令会返回 users 集合中的所有文档,默认以 JSON 格式显示

  • 返回集合中的部分文档(指定查询条件)
db.yourCollectionName.find({ field: value })

例如,查询 users 集合中 age 字段值为 25 的文档:

db.users.find({ age: 25 })

findOne() 方法

findOne() 方法用于返回集合中满足条件的第一个文档,若不传递参数,则返回集合中的第一个文档

db.yourCollectionName.findOne({ field: value })

例如,查询 users 集合中 name 字段值为 “zhangsan” 的第一个文档:

db.users.findOne({ name: "zhangsan" })

高级查询条件

比较操作符

  • $gt(大于)
    查询 users 集合中 age 大于 20 的文档:
db.users.find({ age: { $gt: 20 } })
  • $lt(小于)
    查询 users 集合中 age 小于 30 的文档:
db.users.find({ age: { $lt: 30 } })
  • $gte(大于等于)
    查询 users 集合中 age 大于等于 25 的文档:
db.users.find({ age: { $gte: 25 } })
  • $lte(小于等于)
    查询 users 集合中 age 小于等于 28 的文档:
db.users.find({ age: { $lte: 28 } })
  • $ne(不等于)
    查询 users 集合中 age 不等于 22 的文档:
db.users.find({ age: { $ne: 22 } })

逻辑操作符

  • $and(逻辑与)
    查询 users 集合中 age 大于 20 且小于 30 的文档:
db.users.find({ $and: [ { age: { $gt: 20 } }, { age: { $lt: 30 } } ] })
  • $or(逻辑或)
    查询 users 集合中 age 等于 20 或 name 等于 “zhangsan” 的文档:
db.users.find({ $or: [ { age: 20 }, { name: "zhangsan" } ] })
  • $not(逻辑非)
    查询 users 集合中 age 不大于 25 的文档:
db.users.find({ age: { $not: { $gt: 25 } } })

投影操作

投影操作可以指定返回文档中包含哪些字段,哪些字段不包含

db.yourCollectionName.find({ query }, { field1: 1, field2: 1, field3: 0 })
  • 1 表示包含该字段,0 表示不包含该字段,_id 字段默认是包含的,若不想包含,需要显式指定 _id: 0

例如,查询 users 集合中 name 和 age 字段,不包含 _id 字段:

db.users.find({}, { name: 1, age: 1, _id: 0 })

排序操作

使用 sort() 方法对查询结果进行排序

db.yourCollectionName.find().sort({ field: 1 })
  • 1 表示升序排序,-1 表示降序排序

例如,对 users 集合按 age 字段升序排序:

db.users.find().sort({ age: 1 })

按 name 字段降序排序:

db.users.find().sort({ name: -1 })

限制和跳过操作

limit() 方法

limit() 方法用于限制返回的文档数量

db.yourCollectionName.find().limit(10)

例如,查询 users 集合中的前 10 个文档:

db.users.find().limit(10)

skip() 方法

skip() 方法用于跳过指定数量的文档

db.yourCollectionName.find().skip(5).limit(10)

例如,跳过 users 集合中的前 5 个文档,然后返回接下来的 10 个文档

正则表达式查询

使用正则表达式可以进行模糊查询

db.yourCollectionName.find({ field: { $regex: 'pattern' } })

例如,查询 users 集合中 name 字段以 “J” 开头的文档:

db.users.find({ name: { $regex: '^J' } })

数组查询

如果文档中包含数组字段,可以使用特定的操作符进行查询

  • 查询数组中包含特定元素的文档
    假设 users 集合中的文档有一个 hobbies 数组字段,查询包含 “reading” 爱好的文档:
db.users.find({ hobbies: "reading" })
  • 使用 $all 操作符查询数组中包含多个特定元素的文档
    查询 hobbies 数组中同时包含 “reading” 和 “swimming” 的文档:
db.users.find({ hobbies: { $all: ["reading", "swimming"] } })
  • 使用 $size 操作符查询数组长度为特定值的文档
    查询 hobbies 数组长度为 3 的文档:
db.users.find({ hobbies: { $size: 3 } })

网站公告

今日签到

点亮在社区的每一天
去签到