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(); });
或者另外一種方法插入數據:
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(); })
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(); })
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(); }) });
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(); });
四. 數據關聯
// 引入數據庫配置模塊 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;
// 引入數據庫配置模塊 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;
// 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}); } })