MongoDB 常用语句

mongodb 由数据库、集合、文档三个层次组成

数据库 database

# 查看所有的数据库
show dbs

# 删除当前使用的数据库
db.dropDatabase()

# 使用某个数据库
use 数据库名

# 查看当前使用的数据库
db
db.getName()

# 查看当前数据库版本
db.version()

# 查看当前数据库状态
db.stats()

# 查看当前 db 的连接机器地址和端口
db.getMongo()

# 修复当前数据库
db.repairDatabase()

# 从一个数据库复制到另一个数据库
#fromdb:string 源数据库名称,用户必须能够对这个db进行鉴权
# todb:string 复制到目的mongod的名字,名字可以跟原名字不一样
# fromhost:string 可选项 ip+port 如果是同一mongd 复制,则忽略该项
# username:string 可选项 源主机用户名
# password: string 可选项 源主机用户名所对应的密码
# mechanism: 有 MONGODB-CR or SCRAM-SHA-1这2种 , db.isMaster().maxWireVersion 值大于等于3 那默认就是 SCRAM-SHA-1 否则默认就是MONGODB-CR(2.6版本的鉴权)
db.copyDatabase(fromdb, todb, fromhost, username, password, mechanism)

# 备份到备份目录
mongodump

# 从备份目录恢复备份语句
mongorestore

集合 collection

# 查看当前数据库下所有的集合
show collections

# 创建集合
db.createCollection('集合名称')
# name:集合的名字
# capped:是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义
# size:限制集合使用空间的大小,默认为没有限制
# max:集合中最大条数限制,默认为没有限制
# autoIndexId:是否使用_id作为索引,默认为使用(true或false)
# size的优先级比max要高
db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>})

# 查看集合状态(以集合名称为 coll 为例,下同)
db.coll.stats()

# 删除集合
db.coll.drop()

文档 document

# 插入空数据并且直接创建名称为 coll 的集合
db.coll.insert({})

# 插入一个或多个数据
db.coll.insert({name: '张三', age: 22})
db.coll.insert([{name: '张三', age: 22},{name: '李四', age: 25}])
# save 方法可以用来插入新数据也可以修改相同 _id 的数据
db.coll.save({name: '王五', age: 26})
db.coll.save({'_id': ObjectId("5de1f5264d0e7ea372eddf12"), name: '王五', age: 26})

# 删除一个或所有数据
db.coll.remove({age: 22})
db.coll.remove({})
# remove 方法第二个参数为真,则只删除符合条件的数据中的第一条
db.coll.remove({age: 22}, 1)

# 更改数据
# $set 修改器 年龄修改为 22,默认只修改查到的第一条
db.coll.update({name: '张三'}, {$set: {age: 22}})
# $inc 修改器 年龄增加 10
db.coll.update({name: '张三'}, {$inc: {age: 10}})
# 如果没有查到就新增一条,将 update 的第三个参数设为 true 即可
db.coll.update({name: 'Tom'}, {$set: {age: 20}}, true)
# 批量更新,将 update 的第四个参数设为 true 即可
db.coll.update({name: '张三'}, {$set: {age: 20}}, false, true)

# 查找数据
# 查出所有数据
db.coll.find()
# 查出一条数据
db.coll.findOne()
# 控制查出数据的显示,1 表示显示,0 表示不显示
db.coll.find({}, {name: 1, '_id': 0})
# 格式化显示查出的数据
db.coll.find().pretty()
# and 查询
db.coll.find({name: '张三', age: 22})
db.coll.find({$and: [{name: '张三'}, {age: 22}]})
# or 查询
db.coll.find({$or: [{name: '张三'}, {age: 22}]})
# 大于
db.coll.find({age: {$gt: 20}})
# 小于
db.coll.find({age: {$lt: 20}})
# 等于
db.coll.find({age: 20})
# 大于等于
db.coll.find({age: {$gte: 20}})
# 小于等于
db.coll.find({age: {$lte: 20}})
# 不等于
db.coll.find({age: {$ne: 20}})
# 取余运算,查出 age % 10 为 1 的
db.coll.find({age: {$mod: [ 10 , 1 ]}})
# 属于,age 的值属于 1,2,3 中的任何一个
db.coll.find({age: {$in: [1, 2, 3]}})
# 不属于,age 的值不属于 1,2,3 中的任何一个
db.coll.find({age: {$nin: [1, 2, 3]}})
# $size,$size是查询一定元素的数量且是数组的字段 
db.coll.find({key: {$size: 1}})
# $exists 存在字段,true 为存在字段 key 的数据,false 为不存在字段 key 的数据
db.coll.find({key: {$existstrue|false}})
# 正则
db.coll.find({name: /^j/, name:/e$/})
db.coll.find({name:{$regex:'runoob',$options:'$i'}})
# 内嵌对象中的值匹配
db.coll.find({'key.subkey': value})
# 取反
db.coll.find({age: {$not: {$lt: 20}}})
# $where,可以使用js
db.students.find({$where :'this.age>20'})
db.students.find({$where: function(){
  return this.age > 20;
}})
# 分页查询,查出从 skip 之后的 limit 个
db.coll.find().limit(20).skip(1)

# 获取查询结果集的数量
db.coll.count('查询条件')
db.coll.find().count()

用户

身份认证:

  1. mongodb 是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
  2. 切换到 admin 数据库,添加的账号才是管理员账号。
  3. 用户只能在用户所在数据库登录,包括管理员账号。
  4. mongodb 安装完成后,默认是没有权限验证的,默认是不需要输入用户名密码即可登录的。
  5. 启用访问控制前,需确保在 admin 数据库中拥有 userAdmin 或 userAdminAnyDatabase 角色的用户。
  6. 启用验证的方式:/etc/mongodb.conf //将 auth=true 前面的注释拿掉,然后重启服务生效。
  7. 启动 mongodb 前需要关闭配置文件中的 auth 选项,否则不能创建用户。

Built-In Roles(内置角色):

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root

权限说明:

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile
  • userAdmin:允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
  • dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。
  • root:只在 admin 数据库中可用。超级账号,超级权限。
# 创建用户
use admin
db.createUser({
	user: '用户名',
	pwd: '密码',
	roles: [{
		role: 'readWrite',
		db: 'admin'
	}]
})

# 用户认证
db.auth('用户名', '密码')

# 创建角色
db.createRole({
	role: 'testRole', 
	privileges: [{
		resource: {db: '', collection: ''},
		actions: ['enableSharding']
	}],
	roles: ['readWriteAnyDatabase']
})

# 显示当前所有用户
show users
db.system.users.find()

# 删除用户
db.dropUser('用户名')

# 修改用户
db.updateUser(
	'用户名',
	{
   		customData: { <any information> }, // 自定义数据,用来添加一些信息,例如创建时间
     	roles: [
               { role: '角色', db: '数据库' } | '角色',
               ...
             ],
     	pwd: '密码'
    },
    writeConcern: { <write concern> } // 对写操作时的异常处理机制
)
# 示例
db.updateUser(
    "root",{
        customData:{
            create_time:"2016-09-03",
            update_time:"2016-09-04"
        },
        pwd:"123456"
    }
)

# 修改用户密码
db.changeUserPassword('用户名', '密码')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值