MongoDB安裝測試和簡單使用
1.先安裝MongoDB
2.
> mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log"
3.測試連接
原來的**cmd窗口不關閉,以管理員身份再開一個cmd窗口**,輸入mongo或者mongo.exe,出現如下信息說明測試通過,此時我們已經進入了test這個數據庫。
4.**將MongoDB安裝為windows服務(重點中的重點)**
當mongod.exe被關閉時,mongo.exe 就無法連接到數據庫了,因此每次想使用mongodb數據庫都要開啟mongod.exe程序,所以比較麻煩,此時我們可以將MongoDB安裝為windows服務
以管理員身份運行**cmd**,進入bin文件夾,執行下列命令
mongod --storageEngine mmapv1 --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\MongoDB.log" --install --serviceName "MongoDB"
5.>輸入NET START MongoDB
6.>輸入mongo
7.關閉服務和刪除進程
先 ctrl+c
關閉服務:net stop MongoDB
MongoDB 常用的命令(重點)
顯示數據庫列表 > show dbs
創建數據庫 > use dbname
1. 增加數據(重點中的重點)
db.web.save({"name":"老李"}) 創建了名為web的集合,並新增了一條{"name":"老李"} 的數據
db.web.insert({"name":"ghost", "age":10}) 在web集合中插入一條新數據,如果沒有web這個集合,mongodb會自動創建
save()和insert()也存在着些許區別:若新增的數據主鍵已經存在,insert()會不做操作並提示錯誤,而save() 則更改原來的內容為新內容。
2. 刪除數據(重點中的重點)
1、刪除文檔
2、刪除集合
3、刪除數據庫
· db.users.remove({}) 刪除users集合下所有數據
· db.users.remove({"name": "lecaf"}) 刪除users集合下name=”lecaf”的數據
· db.users.drop()或db.runCommand({"drop":"users"}) 刪除集合users
· db.runCommand({"dropDatabase": 1}) 刪除當前數據庫,注意 此處的1沒加雙引號。
3. 查找數據(重點中的重點)
· db.users.find() 查找users集合中所有數據
· db.users.findOne() 查找users集合中的第一條數據
· db.users.find().pretty() 格式化查詢到的數據
4. 修改數據(重點中的重點)
· db.web.update({"name":"a1"}, {$set: {sex:”women”}},true,true) 修改name=a1的數據為sex=1,第一個參數是查找條件,第二個參數是修改內容,主鍵不能修改,第三個參數表示匹配所有符合條件的數據,第四個參數表示修改所有匹配到的數據如圖
Mongoose的安裝和使用
1.1.1. 安裝**mongoose**
npm install mongoose
1.1.2. 連接數據庫
使用mongoose連接數據庫的前提條件是:
1、mongo數據庫已經運行。
2、已經安裝了mongoose包
var mongoose = require("mongoose");
// 連接字符串格式為mongodb://主機/數據庫名
mongoose.connect('mongodb://localhost/student);
上面這句的意思是連接到本地的mongodb的student表。
擴展:
// 連接本地mongodb ,本機的ip 127.0.0.1,端口:27017 數據庫:student
mongoose.connect("mongodb://127.0.0.1:27017/student",function(err){
if(!err){//如果連接成功,則打印出connected to Mongodb
console.log("connected to Mongodb");
}else{
throw err;//如果連接失敗,則拋出異常
}
});
1.1.3. 新增數據
先講解一個概念 Schema:
它可以理解為數據庫模型骨架,可以看作工廠中模具一樣,好比一個茶杯,喝水是茶杯最終的功能,茶杯本身就像是Model,那么茶杯的批量生產是需要靠工廠的模具成型的。Schema不僅定義了文檔結構和使用性能,還可以有擴展插件、實例方法、靜態方法、復合索引、文檔生命周期鈎子。
Schema : 一種以文件形式存儲的數據庫模型骨架,不具備數據庫的操作能力 錢的電板
Model : 由Schema發布生成的模型,具有抽象屬性和行為的數據庫操作對 錢的樣板
Entity : 由Model創建的實體,他的操作也會影響數據庫 錢
存儲數據步驟:定義Schema (骨架) > 創建model(模型)> Entity實例化方法。
var Schema = mongoose.Schema;
//通過Schema創建一個模式NewsSchema
var studentSchema = new Schema({
name: String,
age: String
});
student*Schema 類型有哪些*
//通過模式studentSchema 創建一個模型studentModel
var studentModel = mongoose.model("students",studentSchema );
var instance1 = new studentModel ();
instance1.name="tangyan";
instance1.age="18";
//通過save方法保存
instance1.save(function(err){
if (err) {
console.log('保存失敗');
return;
}
});
1.1.4. 刪除數據
思路:
1、刪除數據首先要知道刪除哪一條信息,需要知道信息的id.
2、把對應id的數據查詢出來,執行remove方法
假如我們要刪除id=”57e24521a755e1154039a403”的數據。
var id=”57e24521a755e1154039a403”;
studentQueryModel.findById(id,function(err,doc){
if(!doc){
return next(new NotFound("Doc not found"))
}else{
doc.remove(function(){
console.log('刪除成功');
})
}
});
1.1.5. 修改數據
修改數據的思路:先把對應id的數據查詢出來,對需要修改的字段重新賦值,然后執行save方法保存。
假如我們要修改id=”57e24521a755e1154039a403”的數據。
var id=”57e24521a755e1154039a403”;
studentQueryModel.findById(id,function(err,doc){
//console.log(doc);
doc.name="xiaotangyan" ;//把name修改為xiaotangyan
doc.save(function(err){
if(!err){
console.log('修改成功');
}else{
throw err;
}
});
});
1.1.6. 查詢數據
下面find第一個參數{}里面為空,表示查詢所有的數據:
docs表示查詢的結果集合,可用於渲染ejs模板引擎。
studentQueryModel.find({},function(err,docs){
console.log(docs);
});
2. 需求分析
為了保存網站的數據,通常需要一個數據庫。MongoDB和Node.js特別般配,因為MongoDB是基於文檔的非關系型數據庫,文檔是按BSON(JSON的輕量化二進制格式)存儲的,增刪改查等管理數據庫的命令和JavaScript語法很像。如果你在Node.js里訪問MongoDB的數據,會有我們是一家人的感覺,特別親切。