1,为数据库添加用户和权限
1.0、添加一个用户
db.addUser("userName", "pwd123", true);添加用户、设置密码、是否只读
1.1、数据库认证、安全模式
db.auth("userName", "123123");
1.2、显示当前所有用户
show users;
1.3、删除用户
db.removeUser("userName");
1.4:创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)
1.5:cd到bin文件夹下,在非用户验证的模式下启动数据库:mongod --dbpath“d:\MongoDB\data\db”
db.createUser(
{
user:"boot_admin",
pwd: "boot_admin",
roles:
[
{
role:"readWrite",
db: "admin"
}
]
}
);
说明:
user:用户名
pwd:密码
roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
以下对于角色的介绍。如包涵admin数据库的可以忽略。Mongodb3.X已经取消掉admin数据库了。
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
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
(7. 内部角色:__system
角色描述:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
1.2:在创建角色的数据库中验证:全局用户只能在admin下验证(3.x版本以上已经取消掉admin数据库了)
db.auth('boot_admin','boot_admin')
2.0:在安全模式下启动:安全模式下启动需要用户登录验证
mongod --auth --dbpath “d:\MongoDB\data\db”
3.0:数据库的常用命令:
3.1、Help查看命令提示
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();
3.2、切换/创建数据库
use yourDB; 当创建一个集合(table)的时候会自动创建当前数据库
3.3、查询所有数据库
show dbs;
3.4、删除当前使用数据库
db.dropDatabase();
3.5、从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”);将指定机器上的数据库的数据克隆到当前数据库
3.6、从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
3.7、修复当前数据库
db.repairDatabase();
3.8、查看当前使用的数据库
db.getName();
db; db和getName方法是一样的效果,都可以查询当前使用的数据库
3.9、显示当前db状态
db.stats();
3.10、当前db版本
db.version();
3.11、查看当前db的链接机器地址
db.getMongo();
4.0:Collection聚集集合
4.1、创建一个聚集集合(table)
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
db.createCollection(“collName”);
4.2、得到指定名称的聚集集合(table)
db.getCollection("account");
4.3、得到当前db的所有聚集集合
db.getCollectionNames();
4.4、显示当前db所有聚集索引的状态
db.printCollectionStats();
5.0聚集集合查询
、查询所有记录
db.userInfo.find();
相当于:select* from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。
、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
、查询age = 22的记录
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
、查询age> 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age>22;
、查询age< 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age<22;
、查询age>= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age>= 25;
、查询age<= 25的记录
db.userInfo.find({age: {$lte: 25}});
、查询age>= 23并且age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
、查询name中包含mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select
、查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select
、查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
、查询指定列name、age数据, age >
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age>25;
、按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
、查询name = zhangsan, age = 22的数据
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select
、查询前5条数据
db.userInfo.find().limit(5);
相当于:selecttop 5* from userInfo;
、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select
selecttop
);
、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
、or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age= 25;
、查询第一条数据
db.userInfo.findOne();
相当于:selecttop 1* from userInfo;
db.userInfo.find().limit(1);
、查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age>= 20;
、按照某列进行排序
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
6.0:根据时间分组查询(因为mongodb中有js编辑器,所以你可以使用js代码)
统计每天数据的信息量
// SQL Here
db.聚集和名.aggregate(
[
{ $project : { day : {$substr: ["$时间字段", 0, 10] }}},
{ $group : { _id : "$day", number : { $sum : 1 }}},
{ $sort : { _id : -1 }}
]
)
值为1升序。值为-1降序
操作符介绍:
$project:包含、排除、重命名和显示字段
$match:查询,需要同find()一样的参数
$limit:限制结果数量
$skip:忽略结果的数量
$sort:按照给定的字段排序结果
$group:按照给定表达式组合结果
$unwind:分割嵌入数组到自己顶层文件
$substr:截取字符串
如果sum后是字段。则结果是该字段的和(截图来自官网)。如:
去重
分组:
db.userinfo.group({
key:{"age":true},
initial{"number":0},
$reduce:function(doc,out){out.count ++;},
$finalize:function(out){return out;}
});
key:分组字段;
initial:定义一个number字段;
reduce:编写js函数;
如图:
根据时间范围求和:
先定义number初始值
7,插入:db.userinfo.insert();
查询:db.userinfo.find();
查询多少行:db.userinfo.find().limit(5);
·修改:db.collection.update();
8.0:远程连接数据库
$mongo ip:3003/database -u user -p pwd
注:mongo前不用加”$“符号,密码后不用加“;”,连接成功后直接在cmd命令中操作;
9.0:shell
shell在启动时会加载用户主目录下的.mongorc.js文件,一些频繁被加载的脚本就可以写到该文件中(文件夹路径,如:C:\Users\14410);