简单聊mongodb(1.权限、查询)
MongoDB的权限管理mongodb的用户权限是跟着数据库走的. 除了超级管理员外. 其他管理员只能管理自己的库.创建超级管理员首先, 将数据库调整到admin库.use admindb.createUser({user:"用户名", pwd: "密码", roles:['root']})创建完成后. 需要退出mongodb. 然后修改配置文件:Linuxdbpath=/usr/local/mo
MongoDB的权限管理
mongodb的用户权限是跟着数据库走的. 除了超级管理员外. 其他管理员只能管理自己的库.
创建超级管理员
首先, 将数据库调整到admin库.
use admin
db.createUser({user:"用户名", pwd: "密码", roles:['root']})
创建完成后. 需要退出mongodb. 然后修改配置文件:
Linux
dbpath=/usr/local/mongodb
port=27017
logpath=/usr/local/var/log/mongodb/mongo.log
fork=true
logappend=true
auth=true # 加上账户认证
Windows
storage:
dbPath: D:\MongoDB\Server\4.4\data
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: D:\MongoDB\Server\4.4\log\mongod.log
net:
port: 27017
bindIp: 127.0.0.1
# 注意: security要顶格, authorization要空两格, enabled前面要有个空格
security:
authorization: enabled
然后, 需要重新启动mongodb的服务(linux和mac直接杀掉进程, 重新启动即可, windows去系统服务里重启MongoDB的服务).
然后重新打开mongo, 先进入admin, 登录超级管理员账号, 进入到你想要单独创建管理员的数据库. 然后创建出该数据库的管理员账号
use admin
switched to db admin
db.auth(“sb”,“123456”)
1
use ddd
switched to db ddd
db.createUser({user:“ttt_admin”, pwd:“123456”, roles:[“readWrite”]})
退出管理员账号, 重新登录刚刚创建好的账号
use ddd
switched to db ddd
db.auth(“ttt_admin”, “123456”)
1
db.stu.insert({name: 123, age:3})
WriteResult({ “nInserted” : 1 })
注意, 每个账号只能管理自己的数据库(可以是多个)
MongoDB的查询
db: 当前正在使用的数据库
show dbs: 显示所有数据库
show databases: 显示所有数据库
use xxxx: 调整数据库
db.dropDatabase(): 删除数据库
show collections: 显示当前数据库中所有的集合(表)
db.collection_name.insert({})
db.createCollection(name, {options}) 创建集合 capped:是否卷动, size:大小
db.collection_name.drop() 删除集合
db.collection_name.insert() 向集合中添加数据( 如果该集合不存在, 自动创建)
db.collection_name.isCapped() 判断是否有容量上限(判断该集合是否是固定容量的集合)
mongodb中常见的数据类型:
Object ID: 主键ID
String: 字符串
Boolean: 布尔值
Integer: 数字
Doube: 小数
Arrays: 数组
Object: 文档(关联其他对象) {sname: 李嘉诚, sage: 18, class:{cccc}}
Null : 空值
Timestamp: 时间戳
Date: 时间日期
准备数据
db.stu.insert([
{name: "朱元璋", age:800, address:'安徽省凤阳', score: 160},
{name: "朱棣", age:750, address:'江苏省南京市', score: 120},
{name: "朱高炽", age:700, address:'北京紫禁城', score: 90},
{name: "李嘉诚", age:38, address:'香港xxx街道', score: 70},
{name: "麻花藤", age:28, address:'广东省xxx市', score: 80},
{name: "大老王", age:33, address:'火星第一卫星', score: -60},
{name: "咩咩", age:33, address:'开普勒225旁边的黑洞', score: -160}
])
普通查询
db.stu.find({条件}) 查询所有
db.stu.findOne({条件}) 查询一个
db.stu.find().pretty() 将查询出来的结果进行格式化(好看一些)
比较运算
等于: 默认是等于判断, $eq
小于:$lt (less than)
小于等于:$lte (less than equal)
大于:$gt (greater than)
大于等于:$gte
不等于:$ne
db.stu.find({age:28}) 查询年龄是28岁的学生信息
db.stu.find({age: {$eq: 28}}) 查询年龄是28岁的学生信息
db.stu.find({age: {$gt: 30}}) 查询年龄大于30岁的学生
db.stu.find({age: {$lt: 30}}) 查询年龄小于30岁的学生
db.stu.find({age: {$gte: 38}}) 查询年龄大于等于30岁的学生
db.stu.find({age: {$lte: 38}}) 查询年龄小于等于30岁的学生
db.stu.find({age: {$ne: 38}}) 查询年龄不等于38的学生
逻辑运算
查询年龄等于33, 并且, 名字是"大老王"的学生信息
db.stu.find({$and:[{age: {$eq:33}}, {name:'大老王'}]})
查询名字叫"李嘉诚"的, 或者, 年龄超过100岁的人
db.stu.find({$or: [{name: '李嘉诚'}, {age: {$gt: 100}}]})
查询年龄不小于38岁的人, 名字还不能是朱元璋.
db.stu.find({$nor: [{age: {$lt: 38}}, {name: "朱元璋"}]})
范围运算
使用\$in, \$nin判断数据是否在某个数组内
db.stu.find({age: {$in:[28, 38]}}) 年龄是28或者38的人
正则运算
db.stu.find({address: {$regex:'^北京'}}) 查询地址是北京的人的信息
db.stu.find({address: /^北京/}) 效果一样
skip & limit
跳过3个. 提取3个. 类似limit 3, 3 可以用来做分页
db.stu.find().skip(3).limit(3)
投影
投影可以控制最终查询的结果(字段筛选)
db.stu.find({}, {字段:1, 字段:1})
需要看的字段给1就可以了.
注意, 除了_id外, 0, 1不能共存.
排序
sort({字段:1, 字段:-1})
1表示升序
-1表示降序
对查询结果排序, 先按照age升序排列, 相同项再按照score降序排列
db.stu.find().sort({age:1, score: -1})
统计数量
count(条件) 查询数量
db.stu.count({age:33})
更多推荐
所有评论(0)