
安装版本: db version v4.2.6
MongoDB默认安装并没有开启用户名密码登录,这样太不安全。首先开启一个无需验证用户的MongoDB服务后,进入MongoDB的shell控制台创建用户:
创建用户后,关闭连接,进入正题:
安装路径: D:PROGRA~1\MongoDB\Server\4.2\bin\
配置文件中添加 authorization 项 ,配置文件地址如下,没有可创建 D:PROGRA~1\MongoDB\Server\4.2\bin\mongod.cfg
配置文件内容如下:
配置好之后注册服务:
启动服务:
net start MongoDB
遇到的问题:
Error1:
F CONTROL [main] Failed global initialization: BadValue: dbPath requires an absolute file path with Windows services
Error2:
Error parsing YAML config file: yaml-cpp: error at line 2
以上都是配置文件配置问题,注意文件中不要出现单引号,双引号之类的;
配置项每层缩进都是4个空格,不要用tab缩进
Error3:
控制台显示服务未注册
这个一般是注册服务的命令有引号错误或者路径错误,检查有没有少斜线。正常的注册完服务并启动时,会显示服务已开启。
新开窗口进入mongodb的shell控制台验证:
参考链接:
Mongodb学习(4)通过配置文件启动mongod
windows系统,MongoDB开启用户验证
解决“Error parsing YAML
权限认证已ok
nodejs把数据存到mongodb里方法:首先,创建一个数据库保存用户信息。
在这个数据库中创建一个名为 users 的集合,并插入一条用户信息。当前没有 users 集合,mongodb 会直接创建它。
>db.users.insert( { "userId":1, "name":"tom", "email":"tom@nodejs.org" })
查找信息可以使用 find 或者 findOne,区别在于 findOne 只会返回一个结果。
db.users.findOne( {"userId": 1})
返回的结果:
{
"_id" : ObjectId("5413be6e9e1c9f9c4386756d"),
"userId" : 1,
"name" : "tom",
"email" : "tom@nodejs.org"
}
驱动程序
编辑 package.json, 添加对于 mongodb 的引用。
{
"name": "express-api",
"version": "0.0.1",
"dependencies": {
"express": "2.5.9",
"ejs": "0.4.2",
"mongodb": "1.4.1"
}
}
重新 npm install 安装 mongodb 的驱动。
使用 MongoDB 数据库
修改代码,首先 require mongodb 模块,然后连接到 mongodb 数据库。
var mongo = require("mongodb")
var express = require("express")
var app = express.createServer()
app.set("view engine", "ejs")
app.set("views", __dirname + "/views")
app.set("view options", { layout: false })
app.get("/", function (request, response) {
response.render("index")
})
app.get("/user/:id", function (request, response) {
var id = request.params.id
console.log(id)
app.users.findOne({ "userId": +id }, function (error, doc) {
if (error) return next(error)
response.json(doc)
})
})
// connect mongodb
var server = new mongo.Server("127.0.0.1", 27017)
var db = new mongo.Db("members", server, {safe:true }).open(function (error, client) {
if (error) throw error
console.log("\033[96m + \033[39m connected to mongodb")
app.users = new mongo.Collection(client, "users")
client.ensureIndex("users", "userId", function (error) {
if (error) throw error
console.log("\033[96m + \033[39m ensured index.")
console.log("Web Server listening ......")
app.listen(3000)
})
})
注意现在是到数据库中查找用户。id 前面的 + 用来将表单中的字符串类型数据转换为需要的数字类型。
app.users.findOne({ "userId": +id }, function (error, doc) {
if (error) return next(error)
response.json(doc)
})
1. 以超级管理员身份(root@admin)登陆mongoDB other实例。
$ mongo --port 27017 -u "root" -p "Mongo@123" --authenticationDatabase admin
2. 没有testDB库,use testDB 会自动建库
>use testDB
3. 在 testDB库里建一个 testUsert业务用户(testUser@testDB),并授权
##########################
>db.createUser(
{
user : "testUser",
pwd : "Mongo@123",
roles: [ { role : "readWrite", db : "testDB" } ,
{ role : "dbAdmin", db : "testDB" } ,
{ role : "userAdmin", db : "testDB" }
]
}
)
##########################
类似MySQL: grant all privileges on testDB.* to testUser identified by "Mongo@123"
4. 退出 mongoDB shell
>exit
5. 测试走 testDB 认证库,登陆后只能在自己的库 testDB 里读写
$ mongo --port 27017
>use testDB
>db.auth("testUser","Mongo@123")
测试数据写/读
>db.testTable.insert({"name":"Bogon"})
>db.testTable.find()
删除测试数据
>db.testTable.drop()
客户端工程jdbc连接字符串:
spring.data.mongodb.uri=mongodb://${username}:${password}@${xx.xx.xx.xx:27017,xx.xx.xx.xx:27017,xx.xx.xx.xx:27017}/testDB?authSource=testDB&authMechanism=SCRAM-SHA-1
注意:认证库 authSource 是此时的业务库 testDB,不是admin
如果还需其他选项,请参考MongoDB官方文档
MongoDB Manual/Connection String URI Format
https://www.mongodb.com/docs/manual/reference/connection-string/#connections-connection-options
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)