數據庫(database)
-數據庫的服務器
-服務器用來保存數據
-mongod用來啟動服務器
-數據庫的客戶端
-客戶端用來操作服務器,對數據進行增刪改查的操作
-mongo用來啟動客戶端
(不能關閉啟動的服務器,否則新開的客戶端無法連接)
擴展:將mongodb設置為系統服務,可以自動在后台啟動,不需要每次收到啟動(http://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/)
①-在C盤根目錄data文件夾中創建log文件夾
②-創建配置文件
在目錄 (你安裝MongoDB的路徑)下添加一個配置文件
mongod.cfg
(內容:
systemLog: destination: file path: c:\data\log\mongod.log storage: dbPath: c:\data\db
)
③-以管理員的身份打開命令行窗口
④-執行如下命令
sc.exe create MongoDB binPath= "\"C:\MongoDB\bin\mongod.exe\" --service --config=\"C:\MongoDB\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
備注:sc.exe create MongoDB binPath= "\"mongod的bin目錄\mongod.exe\" --service --config=\"mongo的安裝目錄\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
⑤-啟動mongodb服務
⑥-如果啟動失敗,證明上邊的操作有誤,
在控制台輸入 sc delete MongoDB 刪除之前配置的服務
然后從第一步再來一次
-- 基本概念
數據庫(database)
集合 (collection)
文檔(document)
-在MongoDB中,數據庫和集合都不需要手動創建
當我們創建文檔時,如果文檔所在的集合或者數據庫不存在會自動創建數據庫和集合
-- 基本指令
show dbs
show databases
- 顯示當前的所有數據庫
use 數據庫名
- 進入到指定的數據庫中
db
- db表示的是當前所處的位置
show collections
- 顯示數據庫中所有的集合
-- 數據庫的CRUD(增刪改查)的操作
- 向數據庫中插入文檔
db.<collection>.insert(doc)
- 向集合中插入一個文檔
- 例子: 向test數據庫中的,stus集合中插入一個新的學生對象
{name:"孫悟空",age:12,gender:"男"} db.stus.insert({name:"孫悟空",age:12,gender:"男"})
db.<collection>.find()
- 查詢當前集合中所有的文檔
①-插入數據
向數據庫中插入文檔


db.<collection>.insert()
- 向集合中插入一個或多個文檔
- 當我們向集合中插入文檔時,如果沒有給文檔指定_id屬性,則數據庫會自動為文檔添加_id,該屬性用來作為文檔的唯一標
- _id我們可以自己指定,如果我們指定了數據庫就不會再添加了,如果自己指定_id 也必須確保它的唯一性

db.<collection>.insertOne()
- 插入一個文檔對象
db.<collection>.insertMany() - 插入多個文檔對象
②-查詢
查詢
db.collention.find() - find()用來查詢集合中所有符合條件的文檔 - find()可以接收一個對象作為條件參數 {}表示查詢集合中所有的文檔 {屬性:值} 查詢屬性是指定值的文檔



db.collection.findOne() - 用來查詢集合中符合條件的第一個文檔 - findOne()返回的是一個文檔對象

db.collection.find({}).count() - 查詢所有結果的數量

③-修改
修改
db.collection.update(查詢條件,新對象) - update()默認情況下使用新對象替換舊對象 - 如果需要修改指定的屬性,而不是替換需要使用"修改操作符"來完成修改

$set 可以用來修改文檔中的指定屬性 $unset 可以用來刪除文檔中的指定屬性 - update()默認修改一個

db.collection.updateOne() - 修改一個符合條件的文檔
db.collection.updateMany() - 同時修改多個符合條件的文檔

db.collection.replaceOne() - 替換一個文檔
④-刪除
刪除
db.collection.remove() - 刪除符合條件的所有文檔(默認情況下會刪除多個) 如果remove()第二個參數傳遞一個true,則只會刪除一個


- 如果只傳遞一個空對象作為參數,則會刪除集合中的所有文檔

db.collection.deleteOne() db.collection.deleteMany() - remove()可以根據條件來刪除文檔,傳遞的條件的方式和find()一樣 db.collection.drop(); - 刪除集合 db.dropDatabase() - 刪除數據庫
文檔(document)
文檔是MongoDB中數據的基本單元,類似關系數據庫的行,多個鍵值對有序的放置在一起便是文檔
MongoDB中以文檔的方式存取記錄,如一條記錄格式如下:
{“username”:“sunsu”,“age”:12,email:'damowang@huohu.com','sex':女} {“username”:“sunsu”,“age”:12} {“Username”:“sunsu”,“age”:12} {“Username”:“sunsu”}
注意:
(1)以上是幾個不同的文檔,MongoDB區分大小寫的數據類型,第一個age字段是數字類型,第二個age是字符串類型
(2)每一個文檔尺寸不能超過16M
(3)MongoDB的文檔不能有重復的鍵
(4)文檔的鍵是字符串。除了少數例外情況,鍵可以使用任意UTF-8字符
文檔之間的關系:
一對一(one to one)
- 夫妻 (一個丈夫 對應 一個妻子)
- 在MongoDB,可以通過內嵌文檔的形式來體現出一對一的關系
一對多(one to many)/多對一(many to one)
- 父母 - 孩子
用戶 - 訂單
文章 - 評論
- 也可以通過內嵌文檔來映射一對多的關系
多對多(many to many)
- 分類 - 商品
老師 - 學生
舉例:
//一對一
db.wifeAndHusband.insert([{ name:"黃蓉", husband:{ name:"郭靖" } }, { name:"潘金蓮", husband:{ name:"武大" } } ]); db.wifeAndHusband.find();
//一對多 用戶(users)和訂單(orders)
db.users.insert([{ username:"孫悟空"},{ username:"豬八戒"}]); db.order.insert({list:["蘋果","香蕉","大鴨梨"], user_id:ObjectId("5d2bd20b782eae7ac9b5b5be") }); db.users.find(); db.order.find(); //查找用戶孫悟空的訂單 var user_id = db.users.findOne({ username:"孫悟空"})._id; db.order.find({ user_id:user_id});
//多對多
db.teachers.insert([{ name:"洪七公"},{ name:"黃葯師"},{ name:"龜仙人"}]); db.stus.insert([{ name:"郭靖", tech_ids:[ ObjectId("5d2bd518782eae7ac9b5b5c4"), ObjectId("5d2bd518782eae7ac9b5b5c5") ]},{ name:"孫悟空", tech_ids:[ ObjectId("5d2bd518782eae7ac9b5b5c4"), ObjectId("5d2bd518782eae7ac9b5b5c5"), ObjectId("5d2bd518782eae7ac9b5b5c6") ]}]); db.teachers.find(); db.stus.find();
集合(collection)
集合就是一組文檔,多個文檔組成一個集合,集合類似於mysql里面的表,
無模式是指,在同一個集合中可以包含不同格式的文檔,如:
{“Name”:“Mongodb”,“Type”:“Nosql”}
{“UserName”:“Sunsu”,“age”:12,“Gender”:“male”}
以上兩個文檔可以放在同一個集合中
在mysql需要先建表再插入數據
模式自由:意思是集合里面沒有行和列的概念
注意:MongoDB中的集合不用創建、沒有結構,所有可以放不同格式的文檔