linux命令行操作mongo整理

进入控制台

  1. 当 MongoDB 服务正在运行后,可使用 mongo 命令连接到 MongoDB 实例,如果 MongoDB 运行在默认端口(27017):
mongo
  1. 如果想明确指定端口(即使是默认端口 27017):
mongo --port 27017
  1. 如果 MongoDB 运行在其他主机上,可通过指定主机名和端口来连接,例如,如果 MongoDB 运行在 192.168.1.100 的 27017 端口:
mongo --host 192.168.1.100 --port 27017
  1. 如果 MongoDB 实例启用了认证,需要提供用户名和密码:
mongo --host <hostname> --port <port> -u <username> -p <password> --authenticationDatabase <authDB>
  • :MongoDB 服务器的主机名或 IP 地址
  • :MongoDB 服务器的端口号,这里是 27017
  • :用户名
  • :密码
  • :进行认证的数据库名称
    例如:
mongo --host 192.168.1.100 --port 27017 -u admin -p mypassword --authenticationDatabase admin

当成功连接到 MongoDB 控制台后,将看到类似以下的输出:

MongoDB shell version v<version>
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("<uuid>") }
MongoDB server version: <version>

在 MongoDB 中,没有“表”的概念,与之对应的是“集合(collection)”,例如 global.users 中 global
是数据库名,users 是集合名

常见错误

在增删查改中若出现以下提示:

Error: error: {
        "ok" : 0,
        "errmsg" : "command find requires authentication",
        "code" : 13,
        "codeName" : "Unauthorized"
}

表明 MongoDB 启用了身份验证机制,而当前的会话没有提供有效的身份凭证,因此没有权限执行查询操作

解决办法:
若 MongoDB 启用了身份验证,需要在执行查询操作之前先进行身份验证。使用 db.auth() 方法进行身份验证,示例如下:

// 切换到包含用户信息的数据库,通常是 admin 数据库
use admin
// 进行身份验证,<username> 替换为你的用户名,<password> 替换为你的密码
db.auth("<username>", "<password>")

若身份验证成功,db.auth() 方法会返回 1;若失败,则返回 0
验证成功后,再切换回 global 数据库进行查询

基本操作

1. 数据库操作

查看所有数据库

show dbs

切换到指定数据库

使用 use 命令切换到 global 数据库:

use global

删除当前使用的数据库

db.dropDatabase()

2. 集合操作

查看当前数据库中的所有集合

show collections

创建集合

db.createCollection("<collection_name>")

例如,创建名为 users 的集合:

db.createCollection("users")

删除集合

db.<collection_name>.drop()

例如,删除 users 集合:

db.users.drop()

3. 文档操作

插入文档

  • 插入单个文档
db.<collection_name>.insertOne({ field1: "value1", field2: "value2" })

例如,向 users 集合中插入一个用户文档:

db.users.insertOne({ name: "xiaoming", age: 30, city: "macau" })
  • 插入多个文档
db.<collection_name>.insertMany([
  { field1: "value1", field2: "value2" },
  { field1: "value3", field2: "value4" }
])

例如,向 users 集合中插入多个用户文档:

db.users.insertMany([
  { name: "zhangsan", age: 25, city: "Canton" },
  { name: "lisi", age: 35, city: "shanghai" }
])

查询文档

  • 查询所有文档
db.<collection_name>.find()

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

db.users.find()

这个命令会返回 users集合中的所有文档,如果集合中的文档数量较多,输出可能会很长,可使用 pretty() 方法对输出进行格式化,使其更易读:

db.users.find().pretty()
  • 查询满足特定条件的文档
db.<collection_name>.find({ field: "value" })

例如,查询 users 集合中 city 为 macau 的用户文档:

db.users.find({ city: "macau" })
  • 使用比较运算符查询
db.<collection_name>.find({ field: { $gt: value } }) // 大于
db.<collection_name>.find({ field: { $lt: value } }) // 小于
db.<collection_name>.find({ field: { $gte: value } }) // 大于等于
db.<collection_name>.find({ field: { $lte: value } }) // 小于等于
db.<collection_name>.find({ field: { $ne: value } }) // 不等于

例如,查询 users 集合中 age 大于 30 的用户文档:

db.users.find({ age: { $gt: 30 } })
  • 使用逻辑运算符查询
db.<collection_name>.find({ $and: [{ field1: "value1" }, { field2: "value2" }] }) // 逻辑与
db.<collection_name>.find({ $or: [{ field1: "value1" }, { field2: "value2" }] }) // 逻辑或

例如,查询 users 集合中 age 大于 30 且 city 为 shanghai 的用户文档:

db.users.find({ $and: [{ age: { $gt: 30 } }, { city: "shanghai" }] })

更新文档

  • 更新单个文档
db.<collection_name>.updateOne(
  { field: "value" }, // 查询条件
  { $set: { field_to_update: "new_value" } } // 更新操作
)

例如,将 users 集合中 name 为 xiaoming 的用户的 age 更新为 31:

db.users.updateOne(
  { name: "xiaoming" },
  { $set: { age: 31 } }
)
  • 更新多个文档
db.<collection_name>.updateMany(
  { field: "value" }, // 查询条件
  { $set: { field_to_update: "new_value" } } // 更新操作
)

例如,将 users 集合中 city 为 macau 的所有用户的 age 加 1:

db.users.updateMany(
  { city: "macau" },
  { $inc: { age: 1 } }
)

删除文档

  • 删除单个文档
db.<collection_name>.deleteOne({ field: "value" })

例如,删除 users 集合中 name 为 xiaoming 的用户文档:

db.users.deleteOne({ name: "xiaoming" })
  • 删除多个文档
db.<collection_name>.deleteMany({ field: "value" })

例如,删除 users 集合中 city 为 macau 的所有用户文档:

db.users.deleteMany({ city: "macau" })

其他实用指令

1. 排序查询结果

db.<collection_name>.find().sort({ field: 1 }) // 升序排序
db.<collection_name>.find().sort({ field: -1 }) // 降序排序

例如,按 age 升序排序查询 users 集合中的用户文档:

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

2. 限制查询结果数量

db.<collection_name>.find().limit(<number>)

例如,查询 users 集合中的前 5 个用户文档:

db.users.find().limit(5)

3. 跳过指定数量的查询结果

db.<collection_name>.find().skip(<number>)

例如,跳过 users 集合中的前 2 个用户文档,查询后面的文档:

db.users.find().skip(2)

4. 分页查看数据

如果集合中的文档数量非常多,一次性显示所有文档可能不太方便,可以使用 skip() 和 limit() 方法进行分页查看。例如,每页显示 10 条记录,查看第 2 页的数据(即跳过前 10 条记录,显示接下来的 10 条记录),可以使用以下命令:

db.users.find().skip(10).limit(10).pretty()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值