MongoDB简单用法

news2025/5/25 23:25:05

在这里插入图片描述
图片中 MongoDB Compass 中显示了默认的三个数据库:

  • admin
  • config
  • local

如果在 .env 文件中配置的是:

MONGODB_URI=mongodb://admin:password@localhost:27017/
MONGODB_NAME=RAGSAAS

💡 一、为什么 Compass 里没有 RAGSAAS 数据库?

MongoDB 是懒创建(lazy creation)机制:

MongoDB 只有在你向某个数据库真正写入数据之后,才会创建这个数据库并显示在 Compass 或 CLI 中。

✅ 解决方法:

只需要写入一条数据到你配置的数据库,比如 RAGSAAS,MongoDB 就会自动创建这个库,并在 Compass 中显示出来。


🧪 示例:用 Python 写一条测试数据到 RAGSAAS

你可以运行以下代码测试连接和写入:

from pymongo import MongoClient

# 和你的 .env 配置保持一致
uri = "mongodb://admin:password@localhost:27017/"
client = MongoClient(uri)

# 使用指定的数据库(如果没有,会在插入时自动创建)
db = client["RAGSAAS"]
collection = db["test_collection"]

# 插入一条数据
collection.insert_one({"message": "Hello MongoDB from RAGSAAS!"})

print("插入成功!")

然后重新打开或刷新 Compass,就能看到 RAGSAAS 数据库了。


🛠️ 二、连接字符串存在的问题

MONGODB_URI=mongodb://admin:password@localhost:27017/

这个 URI 表示启用了 MongoDB 用户认证(admin:password),但目前 Compass 没看到任何认证提示,说明你可能还没有真的创建这个用户。

🔍 检查:

你可以打开终端或用 mongosh 执行以下命令看看当前是否存在用户:

use admin
db.getUsers()

如果没有用户,可以这样创建:

use admin
db.createUser({
  user: "admin",
  pwd: "password",
  roles: [{ role: "root", db: "admin" }]
})

然后你就可以使用 URI:

mongodb://admin:password@localhost:27017/

✅ 总结

状态或建议
Compass 看不到 RAGSAAS因为你还没插入数据
.env 配置了 RAGSAAS 数据库没问题,写入一次数据就会创建
使用了账号密码连接确保你在 MongoDB 中已经用 db.createUser 创建过该用户
MongoDB 数据库是否存在MongoDB 是“写了才算存在”,没写之前不会显示

为什么要加 roles: [{ role: “root”, db: “admin” }]


✅ 一、roles 是什么?为什么要加?

MongoDB 是一个支持 角色权限控制(Role-Based Access Control, RBAC) 的数据库。

当使用 db.createUser() 创建用户时,如果不指定 roles,MongoDB 根本不会知道这个用户可以“干什么”。


🚫 如果你不加 roles 会发生什么?

创建的用户默认会是“没有任何权限的空壳用户”。

比如运行:

db.createUser({
  user: "admin",
  pwd: "password"
})

虽然这个用户会被成功创建,但它没有权限做任何事情:

  • 不能读写数据;
  • 不能创建数据库;
  • 甚至连登录后 show dbs 都可能被拒绝。

这就像你办了一张身份证,但没有分配任何门禁卡,你哪都进不去。


✅ 加上 roles: [{ role: "root", db: "admin" }] 的作用

这是给用户分配了一个权限最大的角色:root 超级管理员

这个角色可以干所有事情,包括:

  • 增删改查任意数据库;
  • 创建新用户;
  • 设置权限;
  • 查看系统状态;
  • 甚至删除整个实例的所有数据库。

你可以理解为这是 MongoDB 的“超级管理员”或“DBA”。


👇常见角色对比(简单表格)

角色名作用建议用途
read只能读指定库只读访问
readWrite读写指定库普通应用使用
dbAdmin管理数据库结构(如创建索引)数据库管理员
userAdmin管理用户管理权限
root拥有所有权限(跨库)超级管理员,建议只用于开发和初始搭建

✍️ 举个例子:不同角色的差异

假设你要写一条数据到 RAGSAAS 数据库:

  • 如果你用户只有 read 权限,会被拒绝写入。
  • 如果你是 readWrite,可以正常读写。
  • 如果你是 root,不仅能写,还能给其他人分配权限。

✅ 最佳实践建议

  • 开发环境:你可以直接用 root,方便测试和开发。
  • 生产环境:不要使用 root,应当:
    • 创建一个 readWrite 用户供应用访问;
    • 创建一个 userAdmin 用户供权限管理;
    • 仅在特殊情况下使用 root

🔚 总结一句话:

roles 是 MongoDB 授权控制的核心,你不给角色,用户就像没有“钥匙”的人,什么也干不了。给了 root,就等于给了万能钥匙 🔑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2336503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp-商城-26-vuex 使用流程

为了能在所有的页面都实现状态管理,我们按照前面讲的页面进行状态获取,然后再进行页面设置和布局,那就是重复工作,vuex 就会解决这样的问题,如同类、高度提炼的接口来帮助我们实现这些重复工作的管理。避免一直在造一样的轮子。 https://vuex.vuejs.org/zh/#%E4%BB%80%E4…

UDP概念特点+编程流程

UDP概念编程流程 目录 一、UDP基本概念 1.1 概念 1.2 特点 1.2.1 无连接性: 1.2.2 不可靠性 1.2.3 面向报文 二、UDP编程流程 2.1 客户端 cli.c 2.2 服务端ser.c 一、UDP基本概念 1.1 概念 UDP 即用户数据报协议(User Datagram Protocol &…

Flutter项目之设置页

目录: 1、实现效果图2、实现流程2.1、引入依赖2.2、封装弹窗工具类2.3、设置页2.4、路由中注册设置页面 1、实现效果图 2、实现流程 2.1、引入依赖 2.2、封装弹窗工具类 import package:fluttertoast/fluttertoast.dart;class CommontToast {static showToast(Str…

通过GO后端项目实践理解DDD架构

最近在工作过程中重构的项目要求使用DDD架构,在网上查询资料发现教程五花八门,并且大部分内容都是长篇的概念讲解,晦涩难懂,笔者看了一些github上入门的使用DDD的GO项目,并结合自己开发中的经验,谈谈自己对…

天线静电防护:NRESDTLC5V0D8B

一. 物联网天线的使用环境 1.1 联网天线广泛应用于智能家居领域,比如智能门锁、智能摄像头等设备中,通过天线实现设备与家庭网络的连接,用户可以远程控制和监控家居设备。以智能摄像头为例,它通过天线将拍摄的画面实时传输到用户…

【Linux 并发与竞争】

【Linux 并发与竞争】 Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享…

实用类题目

1. 密码强度检测 题目描述:生活中,为保证账户安全,密码需要有一定强度。编写一个方法,接收一个字符串作为密码,判断其是否符合以下强度要求:长度至少为 8 位,包含至少一个大写字母、一个小写字…

STM32F103C8T6-基于FreeRTOS系统实现步进电机控制

引言 上一篇文章讲述了如何使用蓝牙连接stm32进行数据收发控制步进电机,这篇在之前的基础上通过移植操作系统(FreeRTOS或者其他的也可以,原理操作都类似)实现步进电机控制。 上篇博客指路:STM32蓝牙连接Android实现云…

macOS安装java

一、下载 官网Java Downloads | Oracle 安装载java8,下载对应的JDK Java Downloads | Oracle 二、双击安装 安装 完成 三、查看安装位置 打开终端窗口,执行命令: /usr/libexec/java_home -V /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Content…

zkmall模块商城:B2C 场景下 Vue3 前端性能优化的广度探索与实践

ZKmall作为面向B2C场景的模块化电商平台,其前端性能优化在Vue3框架下的实践融合了架构设计、渲染机制与业务特性,形成了一套多维度的优化体系。以下从技术实现与业务适配两个维度展开分析: 一、Vue3响应式系统深度适配 ​Proxy驱动的精准更新…

【Netty篇】Future Promise 详解

目录 一、 Netty Future 与 Promise —— 异步世界的“信使”与“传话筒”🚀1、 理解 Netty Future2、 理解 Netty Promise 二、 代码案例解读💻例1:同步处理任务成功👍例2:异步处理任务成功📲例3&#xff…

视频分析设备平台EasyCVR安防视频管理系统,打造电石生产智能视频监控新体系

一、背景介绍 电石生产中的出炉工序是整个生产流程中最为繁重且危险的环节。在开堵炉眼的过程中,电石极易发生飞溅现象,尤其在进行吹氧操作时,人员灼伤的风险极高。鉴于此,该工序正逐步由传统的人工操作模式向智能化方向转变。然…

从 PyTorch 到 ONNX:深度学习模型导出全解析

在模型训练完毕后,我们通常希望将其部署到推理平台中,比如 TensorRT、ONNX Runtime 或移动端框架。而 ONNX(Open Neural Network Exchange)正是 PyTorch 与这些平台之间的桥梁。 本文将以一个图像去噪模型 SimpleDenoiser 为例&a…

Android 应用添加Tile到SystemUI QuickSettings

安卓源码里有谷歌给的关于 Tile 的说明。 frameworks/base/packages/SystemUI/docs/qs-tiles.md SystemUI QuickSettings 简称QS,指的是 下拉菜单里的区域。区域里的一个选项就是一个 Tile 。 下图是 frameworks/base/packages/SystemUI/docs/ 里的附图示例&#…

【MySQL】前缀索引、索引下推、访问方法,自适应哈希索引

最左前缀原则 对于INDEX(name, age)来说最左前缀可以是联合索引的最左N个字段, 也可以是字符串索引的最左M个字符。 SELECT * FROM t WHERE name LIKE 张%其效果和单独创建一个INDEX(name)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…

Android Studio开发知识:从基础到进阶

引言 Android开发作为移动应用开发的主流方向之一,曾吸引了无数开发者投身其中。然而,随着市场饱和和技术迭代,当前的Android开发就业形势并不乐观,竞争日益激烈。尽管如此,掌握扎实的开发技能仍然是脱颖而出的关键。本…

ocr-身份证正反面识别

在阿里云官网,申请一个token [阿里官方]身份证OCR文字识别_API专区_云市场-阿里云 (aliyun.com) 观察一下post请求body部分json字符串,我们根据这个创建一个java对象 先默认是人像面 public class IdentityBody {public String image;class configure…

单节锂电池4.2V升压5V都有哪些国产芯片推荐?国产SL4011高效,高性价比

针对单节锂电池(4.2V)升压至5V应用中 SL4011升压芯片 的核心优势解析,结合其技术参数与典型应用场景进行详细说明: 1. 宽输入电压与高兼容性 输入范围:2.7V-12V,完美覆盖单节锂电池全周期电压(3…

机器学习 | 神经网络介绍 | 概念向

文章目录 📚从生物神经元到人工神经元📚神经网络初识🐇激活函数——让神经元“动起来”🐇权重与偏置——调整信息的重要性🐇训练神经网络——学习的过程🐇过拟合与正则化——避免“死记硬背” &#x1f440…

视频孪生重构施工逻辑:智慧工地的数字化升级

当"智慧工地"概念在2017年首次写入《建筑业发展"十三五"规划》时,行业普遍将其等同于摄像头与传感器的简单叠加。十年数字浪潮冲刷下,智慧工地的内涵已发生本质跃迁:从工具层面的信息化改造,进化为基于视频数…