前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongodb的用户登录认证和基本使用

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

作者头像
拓荒者
发布2019-07-04 12:14:36
3.3K0
发布2019-07-04 12:14:36
举报

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管道操作符处理后,前五个文档被"过滤"掉。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongodb的用户登录认证和基本使用
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档