使用mongoose管理數(shù)據(jù)庫

node.js有針對MongoDB的數(shù)據(jù)庫驅(qū)動:MongoDB。你可以使用“cnpm install mongodb”
不過直接使用MongoDB模塊雖然大而靈活,但有些繁瑣,在下就是mongoose
如果你對原始驅(qū)動某塊感興趣可以去https://docs.mongodb.org/getting-started/node/client/。

mongoose構(gòu)建MongoDB之上,提供了schema,mode和document對象,用起來比較方便

我們可以用schema對象定義文檔的結(jié)構(gòu)(類似表的結(jié)構(gòu)),也可以定義字段和類型,唯一性,索引和驗證
model對象表示集合中的所有文檔。。document對象作為集合中的單個文檔表示mongoose
還有query和aggregate對象,query實現(xiàn)查詢,aggregate實現(xiàn)聚合。

關(guān)于這些信息,你們可以去http://mongoosejs.com/docs/guide.html。查看

安裝mongoose
1.使用express準(zhǔn)備一個testmongodb的項目,命令序列如下
express TestMongoDB
cd TestMongoDB
cnpm install
執(zhí)行完了上面的命令后,使用下面的命令安裝mongoose
cnpm install mongoose --save
這個命令安裝mongoose并將其作為項目的依賴,而mongoose依賴mongoDB driver
以及regexp等等模塊也會被自動安裝

為了理解用的API 看這里地 文檔:http://mongoosejs.com/docs/api.html。

使用mongoose可以新建數(shù)據(jù)庫,新建集合,對集合內(nèi)的文檔進(jìn)行CRUD操作,在寫代碼可以對照著
mongo shell 驗證結(jié)果是否符合預(yù)期
2.在TestMongoDB下新建一個mongo.js 內(nèi)容如下
我們使用atom工具打開創(chuàng)建的TestMongoDB在atom中進(jìn)行操作

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/accounts');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('mongoose opened!');
var userSchema = new mongoose.Schema({
name:{type: String, unique: true},
password:String
},
{collection: "accounts"}
);
var User = mongoose.model('accounts', userSchema);

User.findOne({name:"WangEr"}, function(err, doc){
if(err) console.log(err);
else console.log(doc.name + ", password - " + doc.password);
});

var lisi = new User({name:"LiSi", password:"123456"});
lisi.save(function(err, doc){
if(err)console.log(err);
else console.log(doc.name + ' saved');
});
});

上面的文件執(zhí)行“node mongo.js”

要使用mongoose,先require,然后使用connect方法連接數(shù)據(jù)庫。connect原型:

connect(uri, options, [callback])
1
2
uri的格式類似:“mongodb://user:pass@localhost:port/database”。

mongoose的connection對象定義了一些事件,比如connected、open、close、error等,我們可以監(jiān)聽這些事件。

在我們的示例代碼里,我監(jiān)聽了open事件,在回調(diào)函數(shù)中,定義了Schema,調(diào)用mongoose.model來編譯Schema得到Model對象。需要注意的是,定義Schema時指定的collection名字與mongoose.model的第一參數(shù)要保持一致。

拿到了Model對象,就可以執(zhí)行增刪改查等操作了。Model對象有find()、findOne()、update()、remove()等方法,和我們在mongo shell里的用法類似。這些方法都有一個可選的callback,當(dāng)你提供這些callback時,執(zhí)行的結(jié)果會通過這個callback返回給你。如果你不提供,這些方法會返回一個Query對象,你可以再通過Query組裝新的選項,然后調(diào)用Query的exec(callback)來提交查詢。

我在代碼里查找WangEr的檔案時用了callback,沒用Query。

Model對象有個Model(doc)方法,用來構(gòu)造一個文檔(Document)。創(chuàng)建Lisi的文檔時就是這種Document對象的save()方法可以將文檔保存到數(shù)據(jù)庫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考深入淺出mongoose 連接mongoose mongoose連接數(shù)據(jù)庫有兩種方式第一種: 第二種: mon...
    bacbcc94613b閱讀 12,430評論 1 27
  • 1.express node Web應(yīng)用框架,提供了很多Web應(yīng)用和HTTP工具 使用express可以快速搭建一...
    寒梁沐月閱讀 597評論 2 6
  • 參考資料https://www.npmjs.com/package/mongodbhttps://docs.mon...
    程序員有話說閱讀 829評論 0 4
  • 個人入門學(xué)習(xí)用筆記、不過多作為參考依據(jù)。如有錯誤歡迎斧正 目錄 簡介安裝SchemaSchema嵌套官網(wǎng)示例真·M...
    kirito_song閱讀 430評論 0 18
  • 1 “波浪卷,棕色好還是亞麻好?”’ “包臀裙比較顯身材還是A字裙遮大腿啊?” 當(dāng)畢業(yè)號這輛火車在3月的某一天突然...
    小眼魚子ing閱讀 527評論 2 3

友情鏈接更多精彩內(nèi)容