原文:http://blog.csdn.net/jinzhencs/article/details/50930877
一.安裝部署mongo
1.創建文件夾
/opt/mongodb/single
/opt/mongodb/data/db
2.進入single目錄下載安裝包
//下載 tar.gz文件
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.6.tgz
3.解壓 並修改文件名
mv mongodb-linux-x86_64-2.4.6 mongo
4.進入mongo目錄
5.創建配置文件
– mkdir conf
– cd conf
– vim conf.properties
#端口
port=27017
#db存放的目錄
dbpath=/opt/mongotest/data/db
#后台啟動需要配置日志輸出
logpath=/opt/mongotest/single/mongo/log/mongo.log
#日志模式
logappend=true
#設置成后台啟動
fork=true
6.啟動mongo
mongo目錄執行
root@chwx2:/opt/mongotest/single/mongo# ./bin/mongod -f conf/conf.properties
about to fork child process, waiting until server is ready for connections.
forked process: 4988
all output going to: /opt/mongotest/single/mongo/log/mongo.log
child process started successfully, parent exiting
表示后台啟動mongo成功
二.使用mongo進行日常操作
1.連接mongodb
mongo/bin目錄下執行
./mongo
2.查看數據庫
show dbs
3.查看當前所在數據庫
db
4.創建數據庫
use openfire (臨時創建 如果不做操作 則離開后被系統刪除)
5.在當前數據庫刪除當前數據庫
db.dropDatabase()
6.查看當前庫的所有用戶
show users
7.查看集合(或者叫表)
show collections
8.創建集合
db.createCollection(“mycollection”)
9.創建集合並制定集合的屬性
db.createCollection(“mycol”, { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
| 字段 | 類型 | 描述 |
|---|---|---|
| capped | Boolean | (可選)如果為true,則啟用封頂集合。封頂集合是固定大小的集合,會自動覆蓋最早的條目,當它達到其最大大小。如果指定true,則需要也指定尺寸參數。 |
| autoIndexID | Boolean | (可選)如果為true,自動創建索引_id字段的默認值是false。 |
| size | number | (可選)指定最大大小字節封頂集合。如果封頂如果是 true,那么你還需要指定這個字段。 |
| max | number | (可選)指定封頂集合允許在文件的最大數量。 |
10.另一種創建集合
(當插入一條數據時,不存在mongodb會幫我們創建,和創建數據庫同理)
db.MySecondCollection.insert({“name” : “ming”})
11.刪除當前庫的一個集合
db.CollectionName.drop()
12.插入一條數據
db.MyFirstCollection.insert({“_id”:”3”,”title”:”mongotest”,”description”:”this is test”})
注意:插入的都是JSON形式的,所以一定要用{},否則會報錯:
Sat Mar 19 14:22:39.160 SyntaxError: Unexpected token :
13.插入一條_id存在的數據
db.MyFirstCollection.insert({“_id”:”3”,”title”:”mm”})
輸出:E11000 duplicate key error index: openfire.MyFirstCollection.$_id_ dup key: { : “3” }
解釋:_id即是mongodb的默認主鍵,默認自動生成,我們可以直接設置以達到我們想要的目的
問:插入一條和原來集合完全不一樣的數據可以嗎?
答:可以,所以我們要在程序中規避,手動指定我們一個集合里面的字段,否則就無法實現查詢及其他功能了
> db.MyFirstCollection.insert({"newTitle":"null"})
> db.MyFirstCollection.find();
{ "_id" : "3", "title" : "new title", "description" : "this is test" }
{ "_id" : ObjectId("56ecf4fe0dceecace97c4506"), "newTitle" : "null" }
14.查看集合第一條記錄
db.MySecondCollection.findOne();
輸出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), “name” : “ming” }
15.查找一條/多條特定數據
db.MySecondCollection.findOne({“name”:”ming”})
輸出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), “name” : “ming” }
16.更新一條記錄
db.MyFirstCollection.update({“title”:”mongotest”},{$set:{“title”:”new title”}},true,false)
結果:
db.MyFirstCollection.findOne()
{ “_id” : “3”, “title” : “new title”, “description” : “this is test” }
update詳解
db.collection.update(criteria,objNew,upsert,multi)
criteria:查詢條件
objNew:update對象和一些更新操作符
upsert:如果不存在update的記錄,是否插入objNew這個新的文檔,true為插入,默認為false,不插入。
multi:默認是false,只更新找到的第一條記錄。如果為true,把按條件查詢出來的記錄全部更新。
更新操作符:
1.$inc
用法:{$inc:{field:value}}
作用:對一個數字字段的某個field增加value
示例:db.students.update({name:"student"},{$inc:{age:5}})
2.$set
用法:{$set:{field:value}}
作用:把文檔中某個字段field的值設為value
示例:db.students.update({name:"student"},{$set:{age:23}})
3.$unset
用法:{$unset:{field:1}}
作用:刪除某個字段field
示例: db.students.update({name:"student"},{$unset:{age:1}})
4.$push
用法:{$push:{field:value}}
作用:把value追加到field里。注:field只能是數組類型,如果field不存在,會自動插入一個數組類型
示例:db.students.update({name:"student"},{$push:{"title":"major"}}
5.$rename
用法:{$rename:{old_field_name:new_field_name}}
作用:對字段進行重命名(不是值,是字段)
示例:db.students.update({name:"student"},{$rename:{"name":"newname"}})
設置用戶權限及訪問
1.給admin添加用戶
切換到admin庫:use admin
添加admin用戶:db.addUser(“root”,”admin”)
注意:必須先給admin庫添加用戶,否則就算給具體的庫添加了用戶,后續進入依然能操作具體庫.
因為默認admin庫用戶具有最高權限,相當於具體庫需要認證時,進入的用戶持有的是admin的權限,所以無需認證依然能進行操作.
2.給具體庫添加用戶
use openfire
db.addUser("openfire","password")
3.重啟mongo並在啟動時配置需要認證
方法一:退出重啟並加上auth參數
./bin/mongod -f conf/conf.properties –auth(注意是兩個-)
方法二:修改配置文件,加上參數(推薦)
auth=true
3.測試權限
>use openfire
>db.MySecondCollection.findOne();
Sat Mar 19 14:04:55.653 error: {
"$err" : "not authorized for query on openfire.MySecondCollection",
"code" : 16550
} at src/mongo/shell/query.js:128
4.認證並操作
//此處應該設置成更加恰當的用戶名及密碼
> db.auth("openfire","password")
1
> db.MySecondCollection.findOne()
{ "_id" : ObjectId("56ecde0662552d15c443dd4a"), "name" : "ming" }
>
5.另一種方法認證
在進入mongo時候加上數據庫及用戶名、密碼
./bin/mongo openfire -uopenfire -ppassword
root@test:/opt/mongotest/single/mongo# ./bin/mongo openfire -uopenfire -ppassword
MongoDB shell version: 2.4.6
connecting to: openfire
> db
openfire
> db.MySecondCollection.findOne()
{ "_id" : ObjectId("56ecde0662552d15c443dd4a"), "name" : "ming" }
>
mongdb進階
1.find()指定返回字段
作用:減少流量
如果key:value,返回的value是個非常大的JSON,而我們不需要這么多字段,也許我們只需要其中的一個.
那么使用projection來過濾:
db.collection.find(query, projection) 此處projection就是返回值的過濾條件
| 參數 | 類型 | 描述 |
|---|---|---|
| query | 文檔 | 可選. 使用查詢操作符指定查詢條件 |
| projection | 文檔 | 可選.使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值, 只需省略該參數即可(默認省略). |
返回值: 匹配查詢條件的文檔集合的游標. 如果指定投影參數,查詢出的文檔返回指定的鍵 ,”_id”鍵也可以從集合中移除掉。
_id不指定的話,總是會返回.
1或者true代表返回,0或者false代表不返回
示例:
db.MyFirstCollection.findOne({“title”:”new title”},{“description”:1,”_id”:0});
{ “description” : “this is test” }
也可以使用表達式:
db.MyFirstCollection.findOne({“title”:”new title”},{Items:{“$slice”:[3,1]}});
引用: http://www.cnblogs.com/crazylights/archive/2013/05/08/3068098.html
