有时候我们在很多文件夹创建了后端代码都用的是同一个Mongodb的集合collection,也都用的同一个node_modules/mongodb的驱动
但在脱离这个node_modules/mongodb驱动 的时候,我们另外创建一个node_modules/mongodb驱动 应该怎么搭建呢?
mongodb数据库安装在E:\mongodb中,在nodejs中node_modules\mongodb都是驱动文件
- 比如以前一直用D:\backend\node_modules\mongodb这个驱动mongodb数据库
- 今天我们在要D盘新建一个D:\backendAPI,这个时候我们初始化npm init -y安装了express,也安装了mongodb驱动,但连接的还是老数据,怎么连接新的数据库?
- 要连接新数据库,mongodb只认端口,所以我们得先改mongod.cfg的配置
在D盘创建
javascript
mkdir backendAPI
cd backendAPI
mkdir mongoData //创建一个存放mongo数据的文件夹
mkdir mongoLogs //创建一个存放Mongo日志的文件夹
//在安装数据库中找到mongod.cfg配置文件
E:\mongodb\mongod.cfg
//复制一份到D:\backendAPI中进行修改
修改mongod.cfg配置文件
javascript
storage:
//存放mongo数据的文件路径
dbPath: D:\backendAPI\mongoData
//存放mongo日志的文件路径
systemLog:
destination: file
logAppend: true
path: D:\backendAPI\mongoLogs\mongod.log
//这里改的端口
net:
port: 28017 //你可以改成你想要的端口如27018,27019等
bindIp: 127.0.0.1
security:
authorization: enabled
现在启动配置文件
javascript
用管理员身份进入命令提示符cmd,再进入你的E:\mongodb\bin目录
执行
mongod --config "D:\backendAPI\mongod.cfg"
如果有错误说明你哪儿写错了
如果什么反应都没有才是正常的,这个时候你不要关闭这个cmd
再打另外一个cmd进行登陆尝试
mongosh --port 28017
如果显示test> 说明配置生效了
这只是临时的启动这个配置,如果你想长期的启动这个配置,可以进行配置安装
cd /d E:\mongoDB\bin
mongod --config "D:\backendAPI\mongod.cfg" --install
然后启动mongodb
net start MongoDB
检查数据库状态的正确方法
javascript
// 查看所有数据库(包括系统数据库)
show dbs
// 或者使用更详细的命令
db.adminCommand({listDatabases: 1})
// 查看当前数据库的状态
db.stats()
// 查看所有集合(包括系统集合)
show collections
初始化admin数据库(如果需要)
javascript
use admin
// 创建管理员用户
db.createUser({
user: "admin",
pwd: "your_password",
roles: ["root"]
})
// 创建后你就能看到系统集合了
show collections
// 查看当前连接信息
db.getMongo()
// 查看服务器状态
db.serverStatus()
// 查看当前数据库
db.getName()
//查看用户信息
db.getUsers()
// 使用创建的用户认证
db.auth("admin", "yourSecurePassword")
// 检查权限
db.runCommand({usersInfo: "admin", showPrivileges: true})
如果你要创建更精细化的用户权限可以这样
javascript
// 简化版本(适合单机开发)
db.createUser({
user: "admin",
pwd: "yourSecurePassword",
roles: ["root"]
})
// 或者更精确的权限分配
db.createUser({
user: "admin",
pwd: "yourSecurePassword",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" }
]
})
//只读某个集合的用户
db.createUser({
user: "readonly_user",
pwd: "password123",
roles: [
{
role: "read",
db: "your_database_name",
// 限制只能访问特定集合
privileges: [
{
resource: { db: "your_database_name", collection: "specific_collection" },
actions: ["find"]
}
]
}
]
})
//读写某个集合的用户
db.createUser({
user: "readwrite_user",
pwd: "password123",
roles: [
{
role: "readWrite",
db: "your_database_name",
privileges: [
{
resource: { db: "your_database_name", collection: "specific_collection" },
actions: ["find", "insert", "update", "remove"]
}
]
}
]
})
//自定义精确权限的用户
db.createUser({
user: "custom_user",
pwd: "password123",
roles: [],
privileges: [
{
resource: { db: "your_database_name", collection: "users" },
actions: ["find", "insert", "update"] // 只能查找、插入、更新,不能删除
},
{
resource: { db: "your_database_name", collection: "products" },
actions: ["find"] // 只能读取产品数据
}
]
})
//一个博客用户示例
// 创建只能管理文章集合的用户
db.createUser({
user: "article_manager",
pwd: "article_password",
roles: [
{
role: "readWrite",
db: "blog_db",
privileges: [
{
resource: { db: "blog_db", collection: "articles" },
actions: ["find", "insert", "update", "remove"]
},
{
resource: { db: "blog_db", collection: "comments" },
actions: ["find", "insert"] // 可以读评论和添加评论,但不能修改删除
}
]
}
]
})
//查看和管理用户权限
// 查看用户信息
db.getUser("article_manager")
// 查看用户权限详情
db.runCommand({usersInfo: "article_manager", showPrivileges: true})
// 更新用户权限
db.updateUser("article_manager", {
roles: [
{
role: "readWrite",
db: "blog_db",
privileges: [
{
resource: { db: "blog_db", collection: "articles" },
actions: ["find", "insert", "update"]
}
]
}
]
})
// 删除用户
db.dropUser("article_manager")
如果我们只要简单的创建一个普通用户对某个数据库的读、存、更新、删除,只需要这样
javascript
//这里有个区别,看你是use blog_db 还是use admin里面设置普通用户,在写nodejs代码登陆验证必须要写对,不然登陆上不
db.createUser({
user: "article_manager",
pwd: "article_password",
roles: [
{ role: "readWrite", db: "blog_db" }
]
})
//nodejs代码中,如果你是在admin中设置的普通用户jkchen就必须这样写
let urlPath='mongodb://jkchen:123456@localhost:28017/?authSource=admin';
new MongoClient(urlPath);
//nodejs代码中,如果你是在blog_db中设置的普通用户jkchen就必须这样写
let urlPath='mongodb://jkchen:123456@localhost:28017/blog_db?authSource=blog_db';
//简洁写法
let urlPath='mongodb://jkchen:123456@localhost:28017/blog_db';
new MongoClient(urlPath);