因為即將的工作需要,昨天特地安裝并簡單學習了MongodDB
安裝的版本是 2.6.9
學習方式是閱讀*** 官方Docs*** 可以在頁面OPTIONS里選擇pdf然后下載到本地
系統(tǒng)是win7 64位
關于安裝過程就不多提了讶泰,官方Docs里有詳細說明胀溺,實在碰壁網(wǎng)上也有很多教程可以填坑
安裝的目錄是D:\MongoDB
MongoDB默認的數(shù)據(jù)庫目錄是 \data\db蜻牢,需要自己手動創(chuàng)建這兩個文件夾,當然也可以在配置文件中指定其他目錄
配置文件
Mongo本身沒有配置文件,所以要自己手動添加,我將其創(chuàng)建于D:\MongoDB\mongod.cfg下锹安,mongod.cfg文件中對Mongo的log和數(shù)據(jù)庫路徑進行配置,內(nèi)容如下
logpath=d:\data\log\mongod.log
dbpath=d:\data\db
設置成windows服務
然后將其設置成windows服務倚舀,在cmd下鍵入如下命令(注意其中的空格)
sc.exe create MongoDB binPath= "d:\MongoDB\bin\mongod.exe --service --config=d:\MongoDB\mongod.cfg"
創(chuàng)建成功會有 [SC] CreateService 成功 的提示信息
若想刪除該服務可以鍵入
sc delete MongoDB
啟動MongoDB
然后每次開啟在cmd下鍵入
net start MongoDB
關閉使用
net stop MongoDB
如果嫌麻煩可以考慮將其設置為開機自啟叹哭,在之前的添加windows服務中添加 start= "auto",即
sc.exe create MongoDB binPath= "d:\MongoDB\bin\mongod.exe --service --config=d:\MongoDB\mongod.cfg" start= "auto"
或者手動在
控制面板>管理工具>服務
中找到MongoDB修改啟動類型
到此MongoDB的安裝配置基本完成
將MongoDB添加到windows服務是為了更好的啟動MongoDB,通過配置的命令行你也可以知道:
啟動MongoDB服務就是啟動d:MongoDB\bin*目錄下的mongod.exe*
接下來我們將認識該目錄下的另一個重要命令行工具mongo shell痕貌,即mongo.exe风罩,我們將使用它進行數(shù)據(jù)庫的簡單增刪改查(CRUD)來熟悉MongoDB的入門級操作
啟動MongoDB服務之后
雙擊mongo.exe(若將d:MongoDB\bin配置到環(huán)境變量中可直接在cmd下鍵入mongo)
將有類似如下的提示信息:
2015-05-03T13:38:11.507+0800 Hotfix KB2731284 or later update is not installed,
will zero-out data files
MongoDB shell version: 2.6.9
connecting to: test
其中打印了時間、版本以及當前連接數(shù)據(jù)庫名(即:test)等信息
啟動mongo shell默認進入 test 數(shù)據(jù)庫
可以鍵入
db
查看當前所在數(shù)據(jù)庫名舵稠,而鍵入
show dbs
將查看所有數(shù)據(jù)庫名
你會發(fā)現(xiàn)并沒有test泊交,MongoDB在你往該數(shù)據(jù)庫插入數(shù)據(jù)前,并沒有真正創(chuàng)建該數(shù)據(jù)庫柱查,我們使用
use mydb
切換到一個新的數(shù)據(jù)mydb,同樣使用 show dbs 你看不到該數(shù)據(jù)庫云石,鍵入db唉工,將顯示新的數(shù)據(jù)庫名mydb
接下來介紹幾個概念,他們分別與傳統(tǒng)的SQL數(shù)據(jù)庫的這些概念一一對應:
mongo | sql |
---|---|
collection(集合) | table(表) |
document(文檔) | row(行) |
field(字段) | column(列) |
翻譯不準確的話多多見諒
MongoDB是面向 文檔 存儲的nosql數(shù)據(jù)庫汹忠,這里的文檔主要指json格式類型淋硝,而所有的文檔都存儲在MongoDB數(shù)據(jù)庫的 集合 中雹熬,就像SQL數(shù)據(jù)庫中所有的行都存儲在表中,MongoDB的每個數(shù)據(jù)庫可以有很多個 集合谣膳,就像每個數(shù)據(jù)庫可以有多張表
接下來我們創(chuàng)建兩個文檔竿报,在mongo shell中輸入
d1 = {x: 3, y: 4}
d2 = {name: "mongo", age: 18}
然后插入到mydb中的test這個集合中
db.test.insert(d1)
db.test.insert(d2)
往集合中插入文檔使用
db.集合名.insert(文檔)
在這個過程中,如果集合不存在继谚,MongoDB會隱式地自動創(chuàng)建該集合再進行插入烈菌,無需顯式地去創(chuàng)建該集合,可以鍵入
show collections
查看當前數(shù)據(jù)庫的全部集合花履,其中有個自動創(chuàng)建的system.indexes集合存儲當前數(shù)據(jù)庫下的所有索引
接下來查看剛才插入數(shù)據(jù)庫的兩條記錄芽世,鍵入
db.test.find()
將會打印剛才插入集合test中的兩個文檔,并且會自動給每個文檔增加一個 _id 鍵值對
查詢集合中的文檔使用
db.集合名.find()
你還可以給find增加各種限制诡壁,來查詢指定的文檔
我們再往其中增加幾個文檔济瓢,來測試find的限制查詢
db.test.insert({name:"bernie",age:23})
db.test.insert({name:"mike",age:22})
db.test.insert({name:"andy",age:30})
db.test.insert({name:"tony",age:25})
db.test.find()
現(xiàn)在集合打印出了6個文檔,我們查找 age > 22 的所有文檔的 name妹卿,鍵入
db.test.find({age: {$gt: 22}}, {name: 1})
將打印
{ "_id" : ObjectId("5545e1d9f26186a27992619e"), "name" : "bernie" }
{ "_id" : ObjectId("5545e208f26186a2799261a0"), "name" : "andy" }
{ "_id" : ObjectId("5545e22df26186a2799261a1"), "name" : "tony" }
三條文檔旺矾,并且只有只有name而不顯示age
接下來分析 db.test.find({age: {$gt: 22}}, {name: 1})
query criteria(查詢規(guī)則) | projection(投影) |
---|---|
{age: {$gt: 22}} | {name: 1} |
find的第一個參數(shù)是查詢規(guī)則,即限定查詢的條件夺克,容易看出來是代表的是
age > 22,其中 $gt 是條件操作符代表 大于(greater than)箕宙,以下附條件操作符的一一映射表
符號 | 含義 |
---|---|
$eq | = |
$ne | != |
$gt | > |
$lt | < |
$gte | >= |
$lte | <= |
$not | ! |
$in | in |
$nin | not in |
$or | or |
$mod | % |
第二個參數(shù)投影{name:1}是對結(jié)果集的篩選,其中的 1 可以用 true 替換懊直,而如果使用 0 或 false 將會對結(jié)果集的投影進行取反扒吁,也就是除了name其他都會篩選出來
鍵入如下命令進行文檔更新
db.test.update({x:3},{x:100,y:100})
然后鍵入 db.test.find() 查看剛才的 {x: 3, y: 4} 更新為了 {x:100, y:100}
update的第一個參數(shù)同樣是 查詢規(guī)則,第二個條件是具體修改內(nèi)容室囊,如下:
db.集合名.update(查詢規(guī)則, 修改內(nèi)容)
鍵入如下命令刪除文檔
db.test.remove({age:22})
使用 db.test.find() 發(fā)現(xiàn)包含 {age:22} 的文檔已經(jīng)刪除,刪除規(guī)則如下:
db.集合名.remove(查詢規(guī)則)
增刪改查基本完成