MongoDB简单用法

图片中 MongoDB Compass 中显示了默认的三个数据库:
adminconfiglocal
如果在 .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,就等于给了万能钥匙 🔑。
相关文章:
MongoDB简单用法
图片中 MongoDB Compass 中显示了默认的三个数据库: adminconfiglocal 如果在 .env 文件中配置的是: MONGODB_URImongodb://admin:passwordlocalhost:27017/ MONGODB_NAMERAGSAAS💡 一、为什么 Compass 里没有 RAGSAAS 数据库?…...
如何学习嵌入式
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.16 请各位前辈能否给我提点建议,或者学习路线指导一下 STM32单片机学习总…...
【AI】IDEA 集成 AI 工具的背景与意义
一、IDEA 集成 AI 工具的背景与意义 随着人工智能技术的迅猛发展,尤其是大语言模型的不断演进,软件开发行业也迎来了智能化变革的浪潮。对于开发者而言,日常工作中面临着诸多挑战,如代码编写的重复性劳动、复杂逻辑的实现、代码质…...
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 &…...
celery rabbitmq 配置 broker和backend
在使用Celery和RabbitMQ作为消息代理和结果后端时,你需要正确配置Celery以便它们可以有效地通信。以下是如何配置Celery以使用RabbitMQ作为broker(消息代理)和backend(结果后端)的步骤: 安装必要的库 首先…...
vue+electron ipc+sql相关开发(三)
在 Electron 中使用 IPC(Inter-Process Communication)与 SQLite 数据库进行通信是一个常见的模式,特别是在需要将数据库操作从渲染进程(Vue.js)移到主进程(Electron)的情况下。这样可以更好地管理数据库连接和提高安全性。下一篇介绍结合axios写成通用接口形式,虽然没…...
[特殊字符] PostgreSQL MCP 开发指南
简介 🚀 PostgreSQL MCP 是一个基于 FastMCP 框架的 PostgreSQL 数据库交互服务。它提供了一套简单易用的工具函数,让你能够通过 API 方式与 PostgreSQL 数据库进行交互。 功能特点 ✨ 🔄 数据库连接管理与重试机制🔍 执行 SQL…...
GD32裸机程序-SFUD接口文件记录
SFUD gitee地址 SFUD spi初始化 /********************************************************************************* file : bsp_spi.c* author : shchl* brief : None* version : 1.0* attention : None* date : 25-…...
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…...
【Pandas】pandas DataFrame tail
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
通过GO后端项目实践理解DDD架构
最近在工作过程中重构的项目要求使用DDD架构,在网上查询资料发现教程五花八门,并且大部分内容都是长篇的概念讲解,晦涩难懂,笔者看了一些github上入门的使用DDD的GO项目,并结合自己开发中的经验,谈谈自己对…...
精益数据分析(2/126):解锁数据驱动的商业成功密码
精益数据分析(2/126):解锁数据驱动的商业成功密码 大家好!在如今这个数据爆炸的时代,数据就像一座蕴含无限宝藏的矿山,等待着我们去挖掘和利用。最近我在深入研读《精益数据分析》这本书,收获了…...
天线静电防护: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…...
ArrayList的subList的数据仍是集合
ArrayList的subList结果不可强转成ArrayList,否则会抛出 ClassCastException异常 • 级别: 【CRITICAL】 • 规约类型:BUG • 最坏影响: 程序错误,抛出异常 说明:subList 返回的是ArrayList的内部类SubL…...
zkmall模块商城:B2C 场景下 Vue3 前端性能优化的广度探索与实践
ZKmall作为面向B2C场景的模块化电商平台,其前端性能优化在Vue3框架下的实践融合了架构设计、渲染机制与业务特性,形成了一套多维度的优化体系。以下从技术实现与业务适配两个维度展开分析: 一、Vue3响应式系统深度适配 Proxy驱动的精准更新…...
【Netty篇】Future Promise 详解
目录 一、 Netty Future 与 Promise —— 异步世界的“信使”与“传话筒”🚀1、 理解 Netty Future2、 理解 Netty Promise 二、 代码案例解读💻例1:同步处理任务成功👍例2:异步处理任务成功📲例3ÿ…...
第3.3节:print函数详解
1 第3.3节:print函数详解 print是AWK中最常用的输出函数,它可以将指定的变量、字段或表达式的值输出到标准输出。以下是其详细用法: 1.1 基本语法 print (expr1), (expr2), ..., (exprN)。其中expr1, expr2, ..., exprN是要输出的表达式&a…...
视频分析设备平台EasyCVR安防视频管理系统,打造电石生产智能视频监控新体系
一、背景介绍 电石生产中的出炉工序是整个生产流程中最为繁重且危险的环节。在开堵炉眼的过程中,电石极易发生飞溅现象,尤其在进行吹氧操作时,人员灼伤的风险极高。鉴于此,该工序正逐步由传统的人工操作模式向智能化方向转变。然…...
C语言中的.操作符与->操作符的区别
.操作符->操作符访问方式成员访问操作符(类,结构体的成员)指针来访问对象的成员语法形式对象.成员指针->成员举例 person是结构体的对象,里面有一个age是成员变量 person.age 例如,如果有一个指向 person 结构体…...
从 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)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…...
C++中变量、函数存储、包括虚函数多态实现机制说明
从C语言转到C开发,对于类内变量的存储,类内函数的存储,存在疑惑; 子类如何继承父类的变量的?如果子类和父类变量同名了怎么办?C中,函数有了作用域,类内函数,只能是这个类或对应对…...
Android Studio开发知识:从基础到进阶
引言 Android开发作为移动应用开发的主流方向之一,曾吸引了无数开发者投身其中。然而,随着市场饱和和技术迭代,当前的Android开发就业形势并不乐观,竞争日益激烈。尽管如此,掌握扎实的开发技能仍然是脱颖而出的关键。本…...
数据加载与保存
通用方式 SparkSQL提供了通用的数据加载方式,使用spark.read.loa方法,并可通过format指定数据类型(如csv、jdbc、json、orc、parquet、textFile)。 load方法后需传入数据路径(针对csv、jdbc、json、orc、parquet、…...
