【MongoDB】MongoDB语句速查

数据库相关

  • 查看数据库
use database_name   
  • 查看所有数据库
show dbs
  • 查看当前使用的数据库
db
  • 删除数据库
db.dropDatabase()

集合相关

  • 查看集合帮助
db.collection_Name.help();
  • 查看数据库所有集合
show collections
  • 创建集合
db.createCollection(collection_Name)  
  • 创建集合并插入文档
db.collection_Name.insert(document)
  • 删除集合
db.runCommand({drop:'collection_Name'});
  • 创建固定大小集合
 db.createCollection('logs',{size:50,max:5,capped:true});
  • 非固定集合转固定集合
db.runCommand({convertToCapped:"logs",size:5});

文档相关

插入文档

  • insert插入 (如果指定_id字段,并且数据库中有同样值的_id则插入失败)
db.collection_name.insert(document);
  • save插入 (跟上面区别就是会覆盖_id相同的数据)
db.collection_name.save(document)

更新文档

db.collection.update(
   ,
   ,
   {
     upsert: ,
     multi: 
   }
)
  • query 查询条件,指定要更新符合哪些条件的文档
    update 更新后的对象或指定一些更新的操作符
    $set直接指定更新后的值
    $inc在原基础上累加
    upsert 可选,这个参数的意思是,如果不存在符合条件的记录时是否插入updateObj. 默认是false,不插入。
    multi 可选,mongodb 默认只更新找到的第一条记录,如果这个参数为true,就更新所有符合条件的记录。
  • 例子:
db.collection_Name.update({name:'xxx'},{$set:{yyy:10}},{multi:true});

更新操作符

  • $set 直接指定更新后的值
db.collection_Name.update({name:'xxx'},{$set:{yyy:10}},{multi:true});
  • $inc 原基础上累加
db.collection_Name.update({name:'xxx'},{$inc:{yyy:10}},{multi:true});
  • $unset 删除指定键
db.collection_Name.update({name:'xxx'},{$unset:{yyy:10}},{multi:true});
  • $push 向数组中添加元素
db.collection_Name.update({name:'xxx'},{
    $push:{"hobbies":"smoking"}
});
  • $ne 表示not in 一般是查询条件
db.collection_Name.update({name:'xxx',hobbies:{$ne:'smoking'}},{$push:{"hobbies":"smoking"}});
  • $addToSet 向集合中添加元素
db.collection_Name.update({name:'xxx'},{$addToSet:{"hobbies":"smoking"}});
  • $each 把数组元素逐个添加到集合中
var hobbies = ["A",'B'];
db.collection_Name.update({name:'xxx'},{$addToSet:{hobbies:{$each:hobbies}}});
  • $pop 从数组中移除指定索引的元素
db.collection_Name.update({name:'xxx'},{$pop:{hobbies:1}});
  • 修改指定索引元素
db.collection_Name.update({name:'xxx'},{$set:{"hobbies.0":"smoking"}});

删除文档

  • remove 移除集合中数据
db.collection.remove(
   ,
   {
     justOne: 
   }
)
  • 参数:
    query :(可选)删除的文档的条件。
    justOne : (可选)如果设为 true 或 1,则只删除匹配到的多个文档中的第一个
db.collection_Name.remove({name:"xxx"},{justOne:true})

查询文档

  • find 通用查询
db.collection_name.find()
  • find查询指定列
db.collection_name.find({queryWhere},{key:1})
  • 参数:
    collection_name 集合的名字
    queryWhere 参阅查询条件操作符
    key 指定要返回的列
    1 表示要显示
  • 例子:
db.collection_Name.find({},{age:1});
  • findOne 查询匹配结果第一条
db.collection_name.findOne()
  • $in 查询字段在某范围内
db.collection_name.find({age:{$in:[30,100]}},{name:1,age:1});
  • $nin 查询字段不在某范围
db.collection_name.find({age:{$nin:[30,100]}},{name:1,age:1});
  • $not 对特定条件取反
db.collection_name.find({age:{$not:{$gte:20,$lte:30}}});
  • where 条件过滤
db.collection_name.find({$where:"this.age>30"},{name:1,age:1});
  • distinct 查找集合里同字段不重复的值
db.runCommand({distinct:'collection_name',key:'key'}).values;

数组查询

db.collection_Name.find({friends:[ "A", "B", "C", "D" ]});
  • 查询包含A即可
db.collection_Name.find({friends:"A"});
  • $all 必须同时包含AB
db.collection_Name.find({friends:{$all:['A','B']}});
  • $in 或者关系 A或B
db.collection_Name.find({friends:{$in:['A','B']}});
  • $size 按数组长度查询
db.collection_Name.find({friends:{$size:4}});
  • $slice 返回数组中一部分,startIndex可以省略,默认0开始
db.collection_Name.find({},{friends:{$slice:[0,3]}}); 
"friends" : [ "A", "B", "C" ]

条件操作符

  • $gt 大于
db.collectoin_name.find({:{$gt:}})
  • $gte 大于等于
db.collectoin_name.find({:{$gte:}})
  • $lt 小于
db.collectoin_name.find( {:{$lt:}})
  • $lte 小于等于
db.collectoin_name.find({:{$lte:}})
  • 同时使用大于小于
db.collectoin_name.find({:{$gte:},:{$lte:}})
  • $or 或者
db.collection_name.find(
   {
      $or: [
   {key1: value1}, {key2:value2}
      ]
   }
)
  • and于or连用:
db.collection_name.find(
   {
     key1:value1,
     key2:value2,
     $or: [
   {key1: value1},
   {key2:value2}
     ]
   }
)
  • 查询_id
db.collectoin_name.find({"_id" : ObjectId("value")})
  • 查询条数
db.collectoin_name.find().count()
  • 正则匹配
db.collection.find({key:/value/})

分页查询

  • limit 读取指定数量数据
db.collectoin_name.find().limit(number)
  • skip 跳过指定数量数据
db.collectoin_name.find().skip(number)
  • skip与limit连用
db.collectoin_name.find().skip(skipNum).limit(limitNum)
  • sort 排序 1为正序,-1为倒序
db.collectoin_name.find().sort({key:1})
db.collectoin_name.find().sort({key:-1})

索引

  • 创建匿名索引
db.collection_Name.ensureIndex({key:1});
  • 创建命名索引
db.collection_Name.ensureIndex({key:1},{name:'keyIndex'});
db.collection_Name.getIndexes()//查看索引
  • explain 查询速度
db.collection_Name.find({key:'findcondition'}).explain();
  • 指定使用的索引
db.collection_Name.find({key:'findcondition'}).hint("keyIndex").explain(true);
  • 删除索引
db.collection_Name.dropIndex('keyIndex');//删除指定的索引
db.collection_Name.dropIndex('*');
db.runCommand({dropIndexes:"collection_Name",index:"keyIndex"});//删除所有的索引
  • 在后台创建索引
db.collection_Name.ensureIndex({key:1},{name:'keyIndex',unique:true,background:true});
  • 复合索引
db.collection_Name.ensureIndex({key1:1,key2:1});
  • 过期索引
    1.索引字段的值必须Date对象,不能是其它类型比如时间戳
    2.删除时间不精确,每60秒跑一次。删除也要时间,所以有误差。
db.collection_Name.insert({time:new Date()});
db.collection_Name.ensureIndex({time:1},{expireAfterSeconds:10});
  • 全文索引
    $text:表示要在全文索引中查东西
    $search:后边跟查找的内容, 默认全部匹配
db.article.find({$text:{$search:'boy'}});
db.article.find({$text:{$search:'girl'}});
db.article.find({$text:{$search:'boy girl'}});//多次查找,多个关键字为或的关系
db.article.find({$text:{$search:"a b"}}); 
db.article.find({$text:{$search:"boy -girl"}}); // -表示取消
db.article.find({$text:{$search:"a \"coco cola\" b "}}); //支持转义符的,用\斜杠来转义

备份恢复

  • 锁定数据库
db.runCommand({fsync:1,lock:1});
  • 解锁数据库
db.fsyncUnlock();
  • 备份
mongodump
    -- host 127.0.0.1
    -- port 27017
    -- out D:/databack/backup
    -- collection mycollection
    -- db test
    -- username
    -- password
  • 恢复
mongorestore
--host
--port
--username
--password
path

权限

角色

  • 数据库用户角色:
    read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces
    readWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限
  • 数据库管理角色:
    dbOwner:该数据库的所有者,具有该数据库的全部权限。
    dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。
    userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。
  • 集群管理角色:
    admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。
    clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。
    clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)
    clusterMonitor:仅仅监控集群和复制集。
    hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。 备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。
  • 所有数据库角色:
    admin数据库提供了一个mongod实例中所有数据库的权限角色:
    readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。
    readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。
    userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
    dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
  • 超级管理员权限
    root: dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。
  • 备份恢复角色
    backup、restore
  • 内部角色
    __system:集群中对任何数据库采取任何操作

插入用户

//use admin进入admin库,往里面插入用户
db.system.user.insert({
user:'xxx',
pwd:'123',
roles:[
	{
		role:'readWrite',
		db:'dbName'
	}
]
})
//或者调用createUser方法
db.createUser(
{
  user: "",
  pwd: "",
  customData: {  },
  roles: [
    { role: "", db: "" } | "",
    ...
  ],
  authenticationRestrictions: [
     {
       clientSource: ["" | "", ...]
       serverAddress: ["" | "", ...]
     },
     ...
  ]
}
)
  • 参数:
    user 用户名
    roles 一个用户的角色数组
    pwd 可选,账号密码,该字段可以是散列值或字符串,不过存储是按照散列值的方式存储的
    customData 可选 ,可以为任意信息。此字段可用于存储管理员希望与此特定用户关联的任何数据。例如,这可能是用户的全名或雇员id
    authenticationRestrictions 可选的。该字段为3.6版本以后的新特性,服务器在创建用户上强制执行的身份验证限制。指定可连接服务器的访问用户的ip地址列表或指定可连接服务器的服务器ip地址列表。(即白名单验证)

权限登录

mongod --auth  //或者在配置文件中配置auth=true

mongo  -u username -p password 127.0.0.1:27017/dbName //客户端登录方式或者切换到数据库后使用下面鉴权

鉴权

use dbName
db.auth('username',password)

查看权限

db.runCommand({usersInfo:'username',showPrivileges:true});

修改密码

db.changeUserPassword(username, password)

增加角色

db.grantRolesToUser( "userName" , [ { role: "", db: "" } ])

移除角色

db.revokeRolesFromUser( "userName" , [ { role: "", db: "" } ])

更新角色
该方法必须运行在角色的数据库上。该方法会完全覆盖原来的角色配置。

db.updateRole(rolename, update, writeConcern)

删除用户
删除某个数据库的用户,需要先切换到该数据库,否则删除不成功。

db.dropUser(username)

附录

  • 官方文档

你可能感兴趣的:(MongoDB)