1. 程式人生 > >Mongo+nodejs填坑系列——mongoose自動在collection結尾新增's'

Mongo+nodejs填坑系列——mongoose自動在collection結尾新增's'

最近在用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);
})