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后是字段。则结果是该字段的和(截图来自官网)。如: 

mongodb给指定db创建用户并授权 mongodb创建只读用户_mongodb

去重

mongodb给指定db创建用户并授权 mongodb创建只读用户_mongodb给指定db创建用户并授权_02


分组:

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函数;

如图:

mongodb给指定db创建用户并授权 mongodb创建只读用户_字段_03

 

根据时间范围求和:

先定义number初始值


mongodb给指定db创建用户并授权 mongodb创建只读用户_数据_04

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);