文档章节

mongodb的用户登录认证和基本使用

l
 linjin200
发布于 07/03 14:11
字数 2466
阅读 7
收藏 0

mongodb的用户登录认证和基本使用

 

连接:
killall mongo
mongo --host 127.0.0.1:27017
创建超级管理员
>use admin
>db.createUser({
user:"wjb",
pwd:"wjb123456",
roles:[
{
role:"userAdminAnyDatabase",
db:"admin"
}
]
})
Successfully added user: {
        "user" : "user",
        "roles" : [
                {
                        "role" : "dbOwner",
                        "db" : "mydb"
                }
        ]
}
>
如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,在不验证权限的情况下,可以创建一个用户,当继续创建第二个用户时,会返回错误,若想继续创建用户则必须登录,并且要先进入admin数据库。

PS:roles角色官网中分为built-in roles and user-defined roles
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

创建用户时可以在其数据库中创建,这样不用每次都进入admin数据库登录后再切换。如在数据库"mydb"创建用户"newwjb"。
use admin  
  
db.auth("admin","admin")  
创建新数据库
use test#创建新数据库  
#查看所有数据库,没有看到test,插入一条数据才能看到
db.createUser(  
  {  
    user: "testwjb",  
    pwd: "testwjb",  
    roles: [ { role: "dbOwner", db: "test" } ]  
  }  
)  
  
db.auth("testwjb","testwjb")  
db.wjbdb.insert({"name":"iamtest"})
show dbs#此时已看到test数据库
删除数据库
use test#切换当前数据库
db.dropDatabase()

robomongo客户端软件连接:
地址:https://robomongo.org/download
 user: "testwjb",pwd: "testwjb"连接即可 

创建集合

db.createCollection(name, options)
创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
查看已有集合
show collections
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
db.wjbdb.insert({"info":"username"})
删除集合
db.collection.drop()
插入文档
db.COLLECTION_NAME.insert(document)
查看已插入文档
db.wjbdb.find()
{ "_id" : ObjectId("5a9e33ffeb3c44f60d55c866"), "name" : "123123123" }
{ "_id" : ObjectId("5a9e3500eb3c44f60d55c868"), "title" : "come on!" }
{ "_id" : ObjectId("5a9e472df04f6c4684097865"), "info" : "username" }
也可以将数据定义成一个变量:
document=({title: '标题', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: 'Allen',
    url: 'http://www.baidu.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});
db.wjbdb.insert(document)
更新文档
update() 方法
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
参数说明:
*         query : update的查询条件,类似sql update查询内where后面的。
*         update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
*         upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
*         multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
*         writeConcern :可选,抛出异常的级别。

db.wjbdb.update({"title":'标题'},{$set:{'title':'我的新标题'}})
save() 方法
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
参数说明:
*         document : 文档数据。
*         writeConcern :可选,抛出异常的级别。
db.wjbdb.save({"_id" : ObjectId("5a9e4b6af04f6c4684097867"),
    title: '标题123123', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: 'Allen',
    url: 'http://www.baidu.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});
db.wjbdb.find().pretty()#查看更新后的格式化后的数据
删除文档
remove() 
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
参数说明:
*         query :(可选)删除的文档的条件。
*         justOne : (可选)如果设为 true 或 1,则只删除一个文档。
*         writeConcern :(可选)抛出异常的级别。

db.wjbdb.remove({"title" : "save标题"})
查询:
*         query :可选,使用查询操作符指定查询条件
*         projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

db.collection.find(query, projection)

db.col.find().pretty()

查询条件操作符:
*         (>) 大于 - $gt
*         (<) 小于 - $lt
*         (>=) 大于等于 - $gte
*         (<= ) 小于等于 - $lte

db.col.find({"likes" : {$gt : 100}})
MongoDB 中可以使用的类型如下表所示:
类型                  数字    备注
Double                1     
String                 2     
Object                3     
Array                  4     
Binary data         5     
Undefined           6    已废弃。
Object id            7     
Boolean             8     
Date                  9     
Null                  10     
Regular Expression    11     
JavaScript        13     
Symbol            14     
JavaScript (with scope)    15     
32-bit integer    16     
Timestamp        17     
64-bit integer    18     
Min key            255    Query with -1.
Max key            127     

如果想获取 "wjbdb" 集合中 title 为 String 的数据
db.wjbdb.find({"title":{$type:2}}).pretty()
MongoDB Limit() 方法
db.COLLECTION_NAME.find().limit(NUMBER)
>db.wjbdb.find({},{"title":1,_id:0}).limit(3)
{  }
{ "title" : "come on!" }
{  }
MongoDB Skip() 方法
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
> db.wjbdb.find({},{"title":1,_id:0}).skip(1)
{ "title" : "come on!" }
{  }
{ "title" : "标题123123" }
{ "title" : "save标题" }
排序
sort()方法
db.COLLECTION_NAME.find().sort({KEY:1})
> db.wjbdb.find({},{"title":1,_id:0}).sort({"likes":-1})
{ "title" : "标题123123" }
{ "title" : "save标题" }
{  }
{ "title" : "come on!" }
{  }
索引
ensureIndex() 方法
db.COLLECTION_NAME.ensureIndex({KEY:1})
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
ensureIndex() 接收可选参数,可选参数列表如下:
Parameter    Type            Description
background    Boolean    建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
unique            Boolean    建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name             string    索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDups        Boolean    在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparse            Boolean    对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds    integer    指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v                    index version    索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights        document    索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language    string    对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override    string    对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

db.wjbdb.ensureIndex({"title":1},{background:true})
>{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 2,
    "numIndexesAfter" : 2,
    "ok" : 1
}

聚合

aggregate() 方法

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
集合中的数据如下:
{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'runoob.com',
   url: 'http://www.runoob.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},
现在我们通过以上集合计算每个作者所写的文章数,使用aggregate()计算结果如下:

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])


>
以上实例类似sql语句: select by_user, count(*) from mycol group by by_user
在上面的例子中,我们通过字段by_user字段对数据进行分组,并计算by_user字段相同值的总和。
下表展示了一些聚合的表达式:
表达式    描述                实例
$sum    计算总和。    db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg        计算平均值    db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min        获取集合中所有文档对应值得最小值。    db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max    获取集合中所有文档对应值得最大值。    db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push    在结果文档中插入值到一个数组中。    db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet    在结果文档中插入值到一个数组中,但不创建副本。    db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first        根据资源文档的排序获取第一个文档数据。    db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last        根据资源文档的排序获取最后一个文档数据    db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道的概念
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
*         $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
*         $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
*         $limit:用来限制MongoDB聚合管道返回的文档数。
*         $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
*         $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
*         $group:将集合中的文档分组,可用于统计结果。
*         $sort:将输入文档排序后输出。
*         $geoNear:输出接近某一地理位置的有序文档。
管道操作符实例
1、$project实例

db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});
2.$match实例
db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );
$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
3.$skip实例
db.article.aggregate(
    { $skip : 5 });
经过$skip管道操作符处理后,前五个文档被"过滤"掉。

© 著作权归作者所有

l

linjin200

粉丝 23
博文 862
码字总数 947173
作品 0
福州
程序员
私信 提问
MongoVUE无法创建collections、无法使用用户名密码登录

一:MongoVUE无法创建collections Mongodb新的存储引擎为wiredTiger ,在这种存储引擎下面,我们用可视化工具MongoVUE是无法看到collection的应该更换为mmapv1引擎 1、删除data文件夹,然后重...

少年已不再年少
2018/07/08
99
0
mongodb Replica Set 部署

Replica Set 下面实验使用的是ubuntu1404-3.5.13 版本 在ubuntu1404上安装 Replica Set 集群节点: master 安装 使用supervisor管理mongodb slave 安装 使用supervisor管理mongodb arbiter 安...

lvnian2009
2018/06/26
0
0
mongodb(一)mongodb 副本集配置

---layout: blogistop: truetitle: "mongodb 副本集配置"date: 2018-08-29category: mongodbtags: mongodb --- 环境 下载解压 基本配置: 假定已经解压安装完成,现在所处的目录是 /usr/loc......

开心的哈士奇
2018/10/17
167
0
Centos7 下安装MongoDB

一、使用wget命令下载安装包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.2.17.tgz 二、安装,创建数据和日志目录 解压:tar -zxvf mongodb-linux-x86_64-amazon......

ax2472
2017/10/19
17
0
cacti 监控 mongodb 和 redis

早在去年已经出现MongoDB和Redis的Cacti模板,使用它,你可以对你的MongoDB和Redis服务进行流量监控。cacti的模板一直在更新,若企业已经用到nosql这种非关系数据库如mongodb和redis。可按照...

鉴客
2012/05/29
4.6K
5

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部