Mongo+nodejs填坑系列——mongoose自動在collection結尾新增's'
阿新 • • 發佈:2019-02-07
最近在用nodejs和mongodb寫個論壇,在這裡記錄下遇到的一些坑。
連線mongodb時使用的是mongoose模組,安裝和使用方法如下:
安裝:
npm install mongoose --save
使用:
let mongoose = require('mongoose');
mongoose主要分為三個部分:schema(對映),model(模型),entity(實體),三者的關係是:schema生成model,model生成entity,其中model和entity可以對資料庫進行操作,例項如下:
// 定義Schema UserSchema = new mongoose.Schema({ user:{// 真實姓名 type: String }, password: { // 密碼 type: String }, shopCar: { type: Array, // default: [] } }, { collection: 'user'});
// 定義Model let UserModel = mongoose.model('user', UserSchema);
let TestEntity = new User({ user : req.query.user, password : req.query.password, shopCar: [] });坑提示::**其中在定義schema的時候,如果不加第二個引數,那麼即使你在model中定義了表名為‘user’,mongoose會智慧的在表名末尾新增一個's',那麼你查詢的表就會變成‘users’表,所以,為了安全,務必加上{collection:'table_name'}
坑提示::在介面的處理內,處理完後記得把資料庫的連線關閉::mongoose.connection.close()。
建議:生成schema和model的程式碼單獨放在一個檔案中,module.export暴露model的介面,需要使用時在主檔案中require即可,節約每次都要重新寫的問題。
問題:在向資料庫新增時可以使用
TestEntity.save(function(error,doc){ if(error){ console.log("error :" + error); }else{ console.log(doc); db.close();} });entity物件儘量每個schema物件定義的key都寫上,不然又可能會新增失敗
提示:save要重啟資料庫才會看到新增後的資料
提示:如果想要查詢一個表的所有資料,可以使用如下方法:
User.find({}, function (error, docs) { if(error) { console.log("error :" + error); } else { console.log(docs);
})