一、安裝
我個人虛擬機下跑的而是centos6.5 64bit,因此我下載了tgz文件,鏈接https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.1.tgz
使用wget獲取該文件後,使用tar -zxvf進行解壓,將解壓完的目錄拷貝到/usr/local/mongodb下,同時將bin目錄下的可執行文件全部導入系統的path中去,命令如下 export PATH=/usr/local/momgodb/bin:$PATH
這樣就安裝完成了,其實不需要安裝,解壓就可以,呵呵。
二、啓動
切換到bin目錄下,輸入mongod即可啓動,會輸出一堆提示信息,我本機上面得到一個如下的警告信息(W)
Failed to obtain address information for hostname centos: Name or
service not known
按住crtl+C斷開連接,使用mongod --repair進行修復,修復後輸入如下命令啓動
mongod --logpath=log/mongodb.log --fork
這樣mongodb就以後臺進程駐留了。
./bin/mongod --logpath=./log/mongodb.log --fork --rest
加上rest可以讓用用戶在瀏覽器中訪問,訪問端口是28017;而mongodb默認端口是27017
三、插入記錄試試
切換到bin目錄下,輸入./mongo即可操作數據庫,這就類似於輸入mysql進入數據庫管理界面一樣
db.runoob.insert({name:'zhangsan',age:20,sex:1})
db.runoob.find()
四、創建庫,新增記錄、修改記錄、刪除記錄、查找記錄
創建庫:use dingling
新增記錄:db.dingling.insert({name:'zhangsan',age:30,sex:1,job:'軟件工程師'})
db.dingling.insert({name:'lishi',age:30,sex:1,job:'前端工程師'})
修改記錄
db.dingling.update({name:'lishi'},{$set:{name:'zhangsan'}})
db.dingling.update({name:'zhangsan'},{$set:{name:'hehe'}},{multi:true})
刪除記錄
db.dingling.remove({name:'hehe'}) //刪除指定條件數據
db.dingling.remove({}) //刪除所有數據
查找記錄
db.dingling.find()
db.dingling.find().pretty() //以結構化展示
db.dingling.findOne() //只獲取1條
db.dingling.findOne({name:'hehe'})
db.dingling.find({age:{$lt:25}})
db.dingling.find({$or:[{name:'hehe'},{age:20}]}).pretty()
高級查找記錄
1、$type 匹配 具體type值可參看http://www.runoob.com/mongodb/mongodb-operators-type.html
db.dingling.find({name:{$type:2}}) //查找name是字符串類型的
2、limit 限制取條數
db.dingling.find({name:{$type:2}}).limit(2)
//查找2條name是字符串類型的記錄
3、skip 跳過條數
db.dingling.find({name:{$type:2}}).skip(3).pretty() //查找name是字符串類型的記錄,跳過前3條
4、sort 排序 如果沒有指定sort()方法的排序方式,默認按照文檔的升序排列。
db.dingling.find().sort({name:1}) //查找所有記錄,按照名稱升序排列
db.dingling.find().sort({name:-1}) //查找所以記錄,按照名稱降序排列
5、ensureIndex 索引
db.dingling.ensureIndex({name:1,age:-1}) //創建一個以名稱升序,年齡降序的索引
db.dingling.ensureIndex({name:1},{background:true}) //創建一個以名稱升序的索引,在後臺運行
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. |
6、aggregate 統計,類似於mysql中的count
db.dingling.aggregate([{$group:{_id:'$name',num:{$sum:1}}}]) //統計名稱相同的記錄
db.dingling.aggregate([{$group:{_id:'$age',num:{$sum:1}}}]) //統計年齡相同的記錄
表達式 | 描述 | 實例 |
---|---|---|
$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"}}}]) |
7、管道 該功能是結合統計命令來處理
db.dingling.aggregate({$project:{name:1,age:1}}) 查找_id、name、age字段
db.dingling.aggregate({$project:{_id:0,name:1,age:1}}) 查找name、age字段
db.dingling.aggregate([{$match:{age:{$gt:10,$lte:30}}},{$project:{_id:0,name:1,age:1}}]) 查找年齡在10-30歲(含)之間的name和age字段
- $project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用於創建計算結果以及嵌套文檔。
- $match:用於過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標準查詢操作。
- $limit:用來限制MongoDB聚合管道返回的文檔數。
- $skip:在聚合管道中跳過指定數量的文檔,並返回餘下的文檔。
- $unwind:將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。
- $group:將集合中的文檔分組,可用於統計結果。
- $sort:將輸入文檔排序後輸出。
- $geoNear:輸出接近某一地理位置的有序文檔。