1.mongo 远程连接
配置mongodb.conf,注释掉bind_ip
#bind_ip = 127.0.0.1 //注释此行
启用认证登陆
auth = true //将此行前的注释去掉
登陆(authenticationDatabase 验证数据库)
mongo host:port/dbname -u user-p password --authenticationDatabase dbname
mongo 127.0.0.1:27017/admin -u root -p 123456 --authenticationDatabase admin
正确关闭mongod 的方法
use admin
db.shutdownServer()
用户操作
认证
db.auth("user","password")
全部用户
show users // db.system.users.find()
// 新建用户
// 超级用户 root
db.createUser({user: "root",pwd: "123456",roles: [ "root" ]})
// 用户管理权限 userAdminAnyDatabase
db.createUser({user:"userAdmin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
// 数据库管理权限 dbAdminAnyDatabase
db.createUser({user:"dbAdmin",pwd:"123456",roles:[{role:"dbAdminAnyDatabase",db:"admin"}]})
// 数据读写用户 readWriteAnyDatabase
use test
db.createUser({user:"sa",pwd:"sa",roles:[{role:"readWrite",db:"test"}]})
// 已废弃的方法 相当于新建 { "user" : "root", "roles" : [ "dbOwner" ] }
// db.addUser("root","123456")
// 修改密码 db.changeUserPassword("root", "root")
// 删除原用户 db.dropUser("test") // db.system.users.remove({user:"test"});
角色权限
展示角色 show roles;
// 查看当前用户的权限 db.runCommand({usersInfo:"root",showPrivileges:true})
// 查看角色权限 db.getRole( "dbAdminAnyDatabase", { showPrivileges: true } )
集合(collection)文档(JSON)操作
展示集合 show collections;
查询数据 db.collection.find(query) // query可以是 ObjectId("24length")
查询一条 db.collection.findOne(query) // query可以是 ObjectId("24length")
插入数据 db.collection.insert(JSON)
删除数据 db.collection.remove(query)
更新数据 db.collection.update(queryjson,JSON[,{multi:true}]) // 及时匹配多条也只修改一条 ,可选项mulit:true时更新多条
删除集合 db.collection.drop()
添加或更新数据 db.collection.save(JSON) // JSON没有_id是insert否则是upsert
集合名的长度不能超过121字节,是因为集合命名空间中需要额外6个字节 .$_id_ ,放在一起是127个字节
更新修改器
1.增加、修改、删除
$set 增加或修改建对应的值
db.foo.update({"_id" : ObjectId("...")},{"$set":{"total":1,coll:[{"json1":"jsonV"},{"key":"value"}]}})
$unset 删除键对应的值
db.foo.update({"_id" : ObjectId("...")},{"$unset":{"total":null,coll:null}})
2.计数器
$inc 增加或减少数字 只能用于整数、长整数或双精度浮点数
db.foo.update({"_id":ObjectId("...")},{"$inc":{"total":-1}})
3.数组修改器
$push 新增或向尾部插入一个元素 一次只能插入一个
db.foo.update({"_id" : ObjectId("...")},{"$push":{coll:"a"}})
$ne 查询是否不存在某个元素 从查询的角度避免重复
db.foo.update({"_id" : ObjectId("..."),"coll":{"$ne":"a"}},{"$push":{coll:"a"}})
$addToSet 不设置重复值 从数组元素值的角度避免重复数据
db.foo.update({"_id" : ObjectId("54c25d065478a3459336bab0")},{"$addToSet":{coll:"c"}})
$each 将数组拆分,实现批量插入
可以跟$addToSet结合使用
db.foo.update({"_id" : ObjectId("54c25d065478a3459336bab0")},{"$addToSet":{coll:{"$each":["a","b","c","d"]}}})
$pop 栈的方式删除一端元素
负数从左移除一位,null/0/正数从右移除一位
db.foo.update({"_id" : ObjectId("54c25d065478a3459336bab0")},{"$pop":{"coll":1}})
$pull 删除匹配元素
db.foo.update({"_id" : ObjectId("54c25d065478a3459336bab0")},{"$pull":{"coll":5}})
4.数组定位修改器 $
通过下标(0开始)或定位操作符$(有问题)
db.foo.update({"_id" : ObjectId("54c25d065478a3459336bab0")},{"$set":{"coll.0":{"k0":"v0"}}})
5.upsert
创建或更新文档 update第三个参数为true,表示这是个upsert,如果不存在,查询条件会被当做文档的一部分
db.foo.update({"a":"b"},{"$inc":{"total":1}},true)
6.update 第四个参数
代表更新所有匹配到的文档,默认只更新第一个匹配到的文档
db.foo.update({"a":"b"},{"$inc":{"total":1}},false,true)
7.返回更新状态 getLastError
主要对写操作有用,写操作默认不会有返结果:这样就节约了客户端在写操作时等待客户端/服务器之间往返时间
db.runCommand({getLastError:1}) // 等价于 db.getLastErrorObj() 不等价于db.getLastError()
选项
fsync 当没有使用日志功能运行mongod(--nojournal)时,同步的选项强制数据库在同步完所有文件后才返回。 db.runCommand({getlasterror:1,fsync:true})
j:当j=true时,getlasterror调用等待日志提交后才返回。如果服务器没有启用日志功能,它立即返回,并且成功 db.runCommand({getlasterror:1,j:true})
w:客户端可以阻塞直到一个写操作被复制到N个服务器。wtimeout可以联合w一起使用。默认是没有超时(永久等待)db.getLastError(2, 5000) // w=2, timeout 5000ms
返回值
这个命令的返回值是一个多字段的对象。常用的字段已经列在下面;这里可能还有其他字段。
- ok - 为真的话表示getLastError命令成功完成了。它并不表示上一次没有错误。
- err - 如果非空,表示有错误出现。值是一个错误正文的描述。
- code - 如果设置了,表示出现的错误码。
- connectionId - 连接的id。
- lastOp - 上一次操作的op-id
对于更新:
使用了w:<n>/<tag>
- wnote - 如果设置了,表示这里有些不寻常的事情发生,涉及使用w:
- wtimeout - 如果超时了,设置该值为真
- waited - 如果超时了,标记等到了多久,单位毫秒
- wtime - 花在等待操作完成的时间
JSON操作
赋值
foo.key1 = foo.key2
删除某个属性
delete foo.key
其他
展示状态 show dbs;
可以直接使用ObjectId("123456789012345678901234")
0x00 MongoDB权限介绍
1.MongoDB安装时不添加任何参数,默认是没有权限验证的,登录的用户可以对数据库任意操作而且可以远程访问数据库,需以--auth参数启动。
2.在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息。当admin.system.users一个用户都没有时,即使mongod启动时添加了--auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否是以--auth 参数启动),直到在admin.system.users中添加了一个用户。
3.MongoDB的访问分为连接和权限验证,即使以--auth参数启动还是可以不使用用户名连接数据库,但是不会有任何的权限进行任何操作
4.admin数据库中的用户名可以管理所有数据库,其他数据库中的用户只能管理其所在的数据库。
5.在2.4之前版本中,用户的权限分为只读和拥有所有权限;2.4版本的权限管理主要分为:数据库的操作权限、数据库用户的管理权限、集群的管理权限,建议由超级用户在admin数据库中管理这些用户。不过依然兼容2.4版本之前的用户管理方法。
0x01 MongoDB中用户的角色说明
1. read角色
数据库的只读权限,包括:
aggregate,checkShardingIndex,cloneCollectionAsCapped,collStats,count,dataSize,dbHash,dbStats,distinct,filemd5,mapReduce (inline output only.),text (beta feature.)geoNear,geoSearch,geoWalk,group
2. readWrite角色
数据库的读写权限,包括:
read角色的所有权限
cloneCollection (as the target database.),convertToCapped,create (and to create collections implicitly.),renameCollection (within the same database.)findAndModify,mapReduce (output to a collection.)
drop(),dropIndexes,emptycapped,ensureIndex()
3. dbAdmin角色
数据库的管理权限,包括:
clean,collMod,collStats,compact,convertToCappe
create,db.createCollection(),dbStats,drop(),dropIndexes
ensureIndex(),indexStats,profile,reIndex
renameCollection (within a single database.),validate
4. userAdmin角色
数据库的用户管理权限
5. clusterAdmin角色
集群管理权限(副本集、分片、主从等相关管理),包括:
addShard,closeAllDatabases,connPoolStats,connPoolSync,_cpuProfilerStart_cpuProfilerStop,cursorInfo,diagLogging,dropDatabase
shardingState,shutdown,splitChunk,splitVector,split,top,touchresync
serverStatus,setParameter,setShardVersion,shardCollection
replSetMaintenance,replSetReconfig,replSetStepDown,replSetSyncFrom
repairDatabase,replSetFreeze,replSetGetStatus,replSetInitiate
logRotate,moveChunk,movePrimary,netstat,removeShard,unsetSharding
hostInfo,db.currentOp(),db.killOp(),listDatabases,listShardsgetCmdLineOpts,getLog,getParameter,getShardMap,getShardVersion
enableSharding,flushRouterConfig,fsync,db.fsyncUnlock()
6. readAnyDatabase角色
任何数据库的只读权限(和read相似)
7. readWriteAnyDatabase角色
任何数据库的读写权限(和readWrite相似)
8. userAdminAnyDatabase角色
任何数据库用户的管理权限(和userAdmin相似)
9. dbAdminAnyDatabase角色
任何数据库的管理权限(dbAdmin相似)
0x02 MongoDB安装注意事项
1. 安装的时候需要加--auth
加了--auth之后MongoDB才需要验证
2. 需要加--nohttpinterface
不加会有一个28017的端口监听,可以通过网页管理mongodb,不需要请去掉
3. 可以加--bind_ip
加之后可以限制访问的ip
4. 可以加--port
加了之后可以重新制定端口,默认为27017
5. 安装完之后需立即在admin数据库中添加一个用户
只有在admin数据库中添加一个用户后才能使认证生效
注:安装的过程其实就是添加1个服务,指定启动时候的参数。
0x03 用户授权
1. 2.4之前版本的用户管理方式
1.1、进入admin创建一个管理账号
use admin
db.addUser("test","test")
1.2、进入需要使用的数据库中创建一个程序使用用户
use test
db.addUser("test","test")默认拥有读写权限
db.addUser("test","test",True)拥有读取权限
2. 2.4版本的用户管理,也可使用之前版本的方式
2.1、进入admin创建一个管理账号
use admin
db.addUser("test","test")
2.2、进入admin给使用的数据库test创建一个对数据库及日志拥有读写权限的账户
use admin
db.addUser({
"user": "test",
"pwd": "test",
"roles": [ ],
"otherDBRoles": {
"test": [
"readWrite"
],
"test_log": [
"readWrite"
]
}
})
0x04 安全配置方案
1. 安装的时候加--auth,并立即在admin数据库创建一个用户
默认情况下MongoDB是无需验证的,所以这是至关重要的一步
2. 可以考虑安装的时候修改端口和指定访问ip
具体根据实际情况来设定,也可以直接在服务器防火墙上做
3. 安装的时候建议加上--nohttpinterface取消默认的一个网页管理方式
默认的web管理一般不会用,且很多人不知道,最好关闭
4. 管理用户处理
因需要在admin中建立一个管理账户用于管理,最好是设置强密码,但是不要给其他程序使用
5. MongoDB服务运行账户
windows下可以使用network service 或者新建一个用户,使用默认的USERS组,然后添加给予数据库文件及日志存储目录的写权限,并建议取消对cmd等程序的执行权限。
linux下新建一个账户,给予程序的执行权限和数据库文件及日志目录的读写权限,并建议取消对sh等程序的执行权限。
6. 控制好网站或者其他程序使用的连接用户权限
网站或者其他程序使用的用户只给予对应库的权限,不要使用admin数据库中的管理账户。
0x05 常用命令
1. 安装
mongod --dbpath d:\mongodb\data --logpath d:\mongodb\log\mongodb.log ----nohttpinterface --auth --install
2. 添加用户
use admin
db.addUser("test","test")
3. 显示所有数据库
show dbs
4. 使用某个数据库
use test
5. 连接数据库
mongo test -uroot -p123456
6. 添加用户认证
db.auth("username","password")
7. 查看用户
db.system.users.find()
就写几个基本的,其他的网上很多,或者用工具连上去之后操作。
0x06 管理工具
1. MongoVUE
客户端形式的管理工具
不受访问限制的超级用户
use admin
db.createUser(
{
user: "superuser",
pwd: "12345678",
roles: [ "root" ]
}
)
服务器配置: /etc/mongod.conf
# mongod.conf
#where to log
logpath=/var/log/mongodb/mongod.log
# 以追加方式写入日志
logappend=true
# fork and run in background
fork=true
# 端口
#port=27017
# 数据库文件保存位置
dbpath=/var/lib/mongo
# location of pidfile
pidfilepath=/var/run/mongodb/mongod.pid
# Listen to local interface only. Comment out to listen on all interfaces.
bind_ip=127.0.0.1
# Disables write-ahead journaling
# nojournal=true
# Enables periodic logging of CPU utilization and I/O wait
# 启用定期记录CPU利用率和 I/O 等待
#cpu=true
# Turn on/off security. Off is currently the default
# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth=true
#auth=true
# Verbose logging output.
# 详细记录输出
#verbose=true
# Inspect all client data for validity on receipt (useful for
# developing drivers)
# 用于开发驱动程序时的检查客户端接收数据的有效性
#objcheck=true
# Enable db quota management
# 启用数据库配额管理,默认每个db可以有8个文件,可以用quotaFiles参数设置
#quota=true
# Set oplogging level where n is
# 设置oplog记录等级
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#diaglog=0
# Ignore query hints
# 忽略查询提示
#nohints=true
# Enable the HTTP interface (Defaults to port 28017).
# 禁用http界面,默认为localhost:28017
#httpinterface=true
# Turns off server-side scripting. This will result in greatly limited
# 关闭服务器端脚本,这将极大的限制功能
# functionality
#noscripting=true
# Turns off table scans. Any query that would do a table scan fails.
# 关闭扫描表,任何查询将会是扫描失败
#notablescan=true
# Disable data file preallocation.
# 关闭数据文件预分配
#noprealloc=true
# Specify .ns file size for new databases.
# 为新数据库指定.ns文件的大小,单位:MB
# nssize=<size>
# Replication Options
# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#keyFile=/path/to/keyfile
相关推荐
1. **Koa框架**: Koa的核心在于它的中间件系统,这种洋葱模型使得请求和响应的处理变得简单且高效。`app.js`通常是主入口文件,这里会设置中间件,处理路由等。在`middleware`目录下,可能会包含自定义的中间件,...
1. 启动MongoDB:使用以下命令启动MongoDB:`/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --fork --logpath=/usr/local/mongodb/log/mongodb.log --auth`。这个命令将启动MongoDB并启用身份...
1. **MongoDB安装配置启动** MongoDB的安装通常包括下载最新稳定版的安装包,根据操作系统(如Windows、Linux或macOS)进行安装。在Windows上,可以通过运行安装程序完成安装;在Linux上,可以使用包管理器如apt或...
1. 启动客户端: ``` ./bin/mongo --host 127.0.0.1 --port 27017 ``` 2. 显示所有数据库: ``` show dbs ``` 以上就是MongoDB在Linux环境下的安装过程和基础配置。确保理解每个步骤和配置选项,这对于管理和维护...
mongodb数据库相信不用多介绍,大家都不陌生,好久之前曾经安装过mongodb,在一个偶然的情况下被一个大佬直接登陆进来了,刚开始惊呼还有这种操作,后来才发现自己并没有给数据库上锁,并且在安装完mongodb默认启动的...
这个名为"node.js登陆网站.zip"的压缩包包含了实现登录功能所需的三个关键部分:server、views以及.vscode配置文件。 1. **Server**: - **Express框架**:服务器端的核心通常会使用Express,这是一个轻量级的Web...
"MongoDB 主从配置步骤详解" MongoDB 是一个基于分布式文件存储系统的开源文档数据库,具有高性能、易扩展、灵活的数据模型等特点。为了提高数据库的可用性和高可用性,MongoDB 提供了主从配置的功能,以下是 ...
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...
1. node: 12.14.0 2. npm: 6.4.1 3. MongoDB: 5.0.3 功能 - 登陆注册 - 单聊 - 群聊 - 历史消息 - 图片发送 - 文件发送 - 代码片段发送 - 表情发送 - 白板协作 - 音视频聊天 - 消息已读提醒 - 好友分组 - 好友备注...
1. app 文件夹中保存项目的核心代码,提供数据访问接口,返回网页,训练模型,生成模型,验证图片等 2. face_login_app 文件夹中保存移动端代码,使用weui+vue,build后的dist代码放入到APP的dist中 3. vue-...
1.基于vue-cli来搭建单页面应用程序,Webpack进行实时打包 2.使用vue-router配置项目路由,vuex存储公共数据 3.使用MUI框架的图片轮播、图标、按钮、表单等组件优化界面,完成首页、登陆、注册等页面 4.合理使用钩子...
1.基于vue-cli来搭建单页面应用程序,Webpack进行实时打包 2.使用vue-router配置项目路由,vuex存储公共数据 3.使用MUI框架的图片轮播、图标、按钮、表单等组件优化界面,完成首页、登陆、注册等页面 4.合理使用钩子...
1mongodb文件夹:在mongodb index文件的作用引用 注意点当每次编写接口都需要在index.js 引入路由文件 以及router.use(文件路径,文件名) 3)引入公共css在public (reset文件夹名字)第二要使用在public里面的index...
1.基于vue-cli来搭建单页面应用程序,Webpack进行实时打包 2.使用vue-router配置项目路由,vuex存储公共数据 3.使用MUI框架的图片轮播、图标、按钮、表单等组件优化界面,完成首页、登陆、注册等页面 4.合理使用钩子...
mongo_user = 'your_user' # mongodb 登陆用户 mongo_pwd = 'your_password' # mongodb 用户密码 ``` 3. 运行 * Windows : ``` python iHealth_crawler.py ``` * Linux : ``` sh server.sh start ``` ...
基于Vue+Express+MongoDB医院预约挂号系统APP设计毕业源码案例设计 技术栈 :Vue2 + Webpack + MUI + Node.js(Express) + MongoDB 在线挂号系统APP(VUE)项目描述:本项目是一个医院自助挂号的移动端项目,主要...
1、node (6.0 及以上版本) 2、mongodb (开启状态) 3、GraphicsMagick (裁切图片) ``` 整个项目分为两部分:前台项目接口、后台管理接口,共60多个。涉及登陆、注册、添加商品、商品展示、筛选排序、购物车、下单、...
在代码中,URI的格式通常为mongodb://[username:password@]host1[:port1][,...hostN[:portN]],其中可以包含用户名和密码,用于对数据库进行身份验证。一旦成功创建MongoClient对象,就可以通过它来访问特定的数据库...