nodejs-7.1. mongoose模塊

mongoose模塊node

一. 概念:git

  介紹:是一個第三方模塊, 做用:方便在nodejs代碼中操做mongodbgithub

  GitHub 地址: https://github.com/Automattic/mongoosemongodb

★ nodejs-mongo-mongod關係圖:
數據庫

 

2、mongoose主要知識點:npm

1. _id 是 mongodb 集合中的默認主鍵. 是惟一的.架構

2. schema 、 model 與 entity 的關係: 符合ORMapp

★ ORM 對象數據綁定文檔集合,對象在文檔就在,對象再也不文檔也就再也不。mongoose

## 類比: 生產瓶蓋
Schema(架構) => 模具設計稿
Model(模型) => 模具
Entity(實體) => 瓶蓋ide

## mongoose 命名時的推薦: 爲了方便好記

UserSchema UserModel UserEntity

ArticleSchema ArticleModel ArticleEntity

GoodsSchema GoodsModel GoodsEntity

3. 通常集合數據表名定義爲英文單詞單數,mongoose 會自動將集合名稱變成複數.

4. schema設定文檔字段容許的字段類型:

  String
  Number
  Date
  Buffer (字符串類型)
  Boolean
  Mixed  (任意類型)
  ObjectId (主鍵信息數字ID)
  Array

 

三. 代碼使用:
1. 進入工做目錄: cd 文件夾路徑
2. 安裝: cnpm install mongoose --save
3. 操做: 代碼栗子連接
  3.1 插入數據 

//實體對象
var ArticleEntity = new ArticleModel({
  title: 'cctv',
  content: '下雨天',
  author: 'xf',
  date: Date.now(),
  click: 1
});

//寫入  save 保存
ArticleEntity.save(function(err, doc){
  if(err){
    console.log(err)
  }else{
    console.log(doc);
  }
  mongoose.connection.close();
})
//1. 引入mongoose
var mongoose = require('mongoose');

//2. 鏈接mongodb數據庫
mongoose.connect('mongodb://localhost/db3');

//3. 定義文檔結構
var UserSchema = new mongoose.Schema({
username: String,
password: String,
}, {versionKey: false});

//4. 定義模型
var UserModel = mongoose.model('user', UserSchema);

//5. 建立實體
var UserEntity = new UserModel({
username: 'admin',
password: 'adminxxxxx'
});

//6. 寫入數據庫
UserEntity.save(function(err, user){
if(err){
console.log(err);
}else{
console.log(user);
}
//7. 關閉鏈接
mongoose.connection.close();
});
app.js

  或者另外一種方法插入數據:

    articleModel.create(req.body, function (err) { })

 

  3.2 刪除數據
    ArticleModel.find({id: 100}).remove(function(err){ });
    UserModel.remove({id: 200}, function(err){ })

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/db6');

//文檔結構
var ArticleSchema = new mongoose.Schema({
  title: String,
  content: String,
  author: String,
  date: Date,
  click: Number
});

//建立模型
var ArticleModel = mongoose.model('article', ArticleSchema);

//刪除  方式一
/**
 * 
ArticleModel.find({click:1}).remove(function(err){
  if(err) {
    console.log(err)
  }else{
    console.log('delete');
  }
  mongoose.connection.close();
})
*/
// 方式二
  ArticleModel.remove({a:'b'}, function(err){
    if(err){
      console.log('err')
    }else{
      console.log('刪除成功');
    }

  mongoose.connection.close();
})
app.js

 

  3.3 更新數據
    ArticleModel.update({id: {$lt:24}}, {$set:{'title': 'xxx'}}, function(err){ });

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/db6');

//文檔結構
var ArticleSchema = new mongoose.Schema({
  title: String,
  content: String,
  author: String,
  date: Date,
  click: Number
});

//建立模型
var ArticleModel = mongoose.model('article', ArticleSchema);

//更新數據
ArticleModel.update({title:'aaa'}, {$set:{author: '明月'}}, function(err){
  if(err){
    console.log(err)
  }else{
    console.log('更新成功');
  }
  mongoose.connection.close();
})
app.js

 

  3.4 獲取數據 ===> 回調函數中能夠對data進行更新修改save或刪除remove操做

    獲取單條數據:  ArticleModel.findOne({_id:'5b8788d68711943d60ff923b'}, function(err, doc){ });

      根據惟一主鍵_id查找:ArticleModel.findById('5ab0658ec66711071a6be35a', function(err, data){ })

    獲取多條數據:  ArticleModel.find({id:{$lt:26}}, function(err, data){ })

    統計文檔的數量: UserModel.count({}, function(err, data){ console.log(data); });

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/db6');

//文檔結構
var ArticleSchema = new mongoose.Schema({
  title: String,
  content: String,
  author: String,
  date: Date,
  click: Number
});

//建立模型
var ArticleModel = mongoose.model('article', ArticleSchema);

//獲取單條數據
// ArticleModel.findById('5b8666bc6c6e0fc58352f96a', function(err, doc){
//   console.log(doc);
//   mongoose.connection.close();
// });

// ArticleModel.findOne({}, function(err, data){
//  console.log(data);
//  mongoose.connection.close();
// });

// //多條查詢
// ArticleModel.find({}, function(err, data){
//  console.log(data);
//  mongoose.connection.close();
// });

// //統計
// ArticleModel.count({}, function(err, count){
//  console.log(count);
//  mongoose.connection.close();
// });

//更新
// ArticleModel.findById('5b8666bc6c6e0fc58352f96a', function(err, doc){
// ArticleModel.findOne({_id:'5b8666bc6c6e0fc58352f96a'}, function(err, doc){
 // doc
//  console.log(doc);
//  doc.author = '馬劍';

//  doc.save(function(err){
//    if(err){
//      console.log(err)
//    }else{
//      console.log('更新成功');
//    }
//    mongoose.connection.close();
//  })
// });

//刪除
ArticleModel.findById('5b8666bc6c6e0fc58352f96a', function(err, doc){
 // doc
 doc.remove(function(err){
   if(err){
     console.log(err)
   }else{
     console.log('刪除成功');
   }
   mongoose.connection.close();
 })
});
app.js

  

  3.5 查詢數據
    3.5.1 條件:
      小於: ArticleModel.find({id: {$lt: 24}}, function(err, data){ });
    模糊查詢: ArticleModel.find({title: {$regex: /連衣裙/}}, function(err, data){ });
     邏輯與: ArticleModel.find({title: {$regex: /連衣裙/}, id:{$gt: 1490}}, function(err, data){ });
     邏輯或: ArticleModel.find({$or:[{id:{$gt:1490}}, {title:{$regex:/連衣裙/}}]}, function(err, data){ });
    3.5.2 字段: 限定篩選出來的數據哪些字段是要顯示的
      ArticleModel.find({id:{$lt: 24}}).select({id:1}).exec(function(err, data){ })
    3.5.3 截取: 應用場景主要用於分頁顯示效果
      ArticleModel.find({id:{$lt: 30}}).limit(5).exec(function(err, data){ })
      ArticleModel.find({id:{$lt: 30}}).skip(5).limit(5).exec(function(err, data){ })
    3.5.4 排序:
      ArticleModel.find({id:{$lt: 30}}).sort({id:-1}).exec(function(err, data){ })

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/project');

//定義結構
var GoodsSchema = new mongoose.Schema({
  id: Number,
  title: String,
  price: Number,
  pic: String,
  user_id: Number
});

//建立模型
var GoodsModel = mongoose.model('goods', GoodsSchema);

// 讀取數據  
/*
GoodsModel.find({price: {$lt: 9.9}}, function(err, data){
  if(err){
    console.log(err)
  }else{
    console.log(data);
  }
  mongoose.connection.close();
});
*/

// 讀取數據 模糊查詢
/*
GoodsModel.find({title: {$regex: /顯瘦/}}, function(err, data){
  console.log(data);

  mongoose.connection.close();
});
*/

//字段篩選
/*
GoodsModel.find().select({id:1,_id:0,title:1}).exec(function(err, data){
  console.log(data);
  mongoose.connection.close();
});
*/

//截取數據
/*
GoodsModel.find().limit(5).exec(function(err, data){
  console.log(data);
  mongoose.connection.close();
})

GoodsModel.find().skip(5).limit(5).exec(function(err, data){
  console.log(data);
  mongoose.connection.close();
});
*/
 
//排序   先排序後截取
GoodsModel.find().limit(5).sort({id:1}).exec(function(err,data){
  console.log(data);
  mongoose.connection.close();
});
app.js

 

四. 數據關聯

// 引入數據庫配置模塊
var mongoose = require('../configs/db_config.js');

// 定義 user 數據的 骨架(用來約束 itmes 這個集合的)
var articleSchema = new mongoose.Schema({
    // 關聯欄目
    itemId:{
        type: 'ObjectId',
        // 關聯集合
        ref:'item'
    },
    // 文章標題
    title: String,
    // 做者
    author: String,
})

// 3.建立數據庫模型      (在數據庫裏建立集合的時候 會自動幫你變成 複數)
var articleModel = mongoose.model('article', articleSchema);

// 暴露數據庫模型
module.exports = articleModel;
articleModel.js
// 引入數據庫配置模塊
var mongoose = require('../configs/db_config.js');

// 定義 user 數據的 骨架(用來約束 itmes 這個集合的)
var itemSchema = new mongoose.Schema({
    // 欄目名稱
    name: String,
    // 建立時間
    ctime: {
        type:Date,
        default:  new Date()   // 默認值
    },      
    // 欄目的排序
    order:Number,
    // 欄目描述
    description: String      
})

// 3.建立數據庫模型      (在數據庫裏建立集合的時候 會自動幫你變成 複數)
var itemModel = mongoose.model('item', itemSchema);

// 暴露數據庫模型
module.exports = itemModel;
itemModel.js
 // populate 去查關聯的集合
 articleModel.find().populate('itemId',{name:1}).exec(function (err, data) {
            console.log(data);
            if (err) {
                console.log('數據添加數據失敗');
            } else {
                // 響應模版 發送數據
                res.render('admin/articleList', { articlelist: data});
            }
        })
router.js
相關文章
相關標籤/搜索