mongodb的用戶登陸認證和基本使用

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"鏈接便可 sql

建立集合mongodb

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:輸出接近某一地理位置的有序文檔。
管道操做符實例
一、$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管道操做符處理後,前五個文檔被"過濾"掉。app

相關文章
相關標籤/搜索