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ù)庫。