Mongoose 使用Node操做MongoDB

Mongoose好處

  • 能夠爲文檔建立一個模式結構(Schema) 能夠對模型中的對象/文檔進行驗證
  • 數據能夠經過類型轉換轉換爲對象模型
  • 可使用中間件來應用業務邏輯掛鉤
  • 比Node原生的MongoDB驅動更容易

Mongoose提供的新對象

– Schema(模式對象) 對象定義約束了數據庫中的文檔結構 – Model 對象做爲集合中的全部文檔的表示,至關於MongoDB數據庫中的集合collection – Document 表示集合中的具體文檔,至關於集合中的一個具體的文檔mongodb

下載安裝

  • npm i mongoose --save

基本用法

//引入
var mongoose = require("mongoose");
//鏈接數據庫
mongoose.connect("mongodb://127.0.0.1/mongoose_test" , { useNewUrlParser: true, useUnifiedTopology:true});

mongoose.connection.once("open",function(){
	console.log("--> 數據庫鏈接成功");
});

mongoose.connection.once("close",function(){
	console.log("--> 數據庫鏈接已經斷開");
});

//斷開數據庫鏈接
//mongoose.disconnect();

//將mongoose.Schema 賦值給一個變量
var Schema = mongoose.Schema;

//建立Schema(模式)對象
var stuSchema = new Schema({

	name:String,
	age:Number,
	gender:{
		type:String,
		default:"female"
	},
	address:String

});

//經過Schema來建立Model
//Model表明的是數據庫中的集合,經過Model才能對數據庫進行操做
//mongoose.model(modelName, schema):
//modelName 就是要映射的集合名 mongoose會自動將集合名變成複數
var StuModel = mongoose.model("student" , stuSchema);


/*
	- 有了Model,咱們就能夠來對數據庫進行增刪改查的操做了

 	Model.create(doc(s), [callback])
 	- 用來建立一個或多個文檔並添加到數據庫中
 	- 參數:
 		doc(s) 能夠是一個文檔對象,也能夠是一個文檔對象的數組
 		callback 當操做完成之後調用的回調函數

 	查詢的:
	 Model.find(conditions, [projection], [options], [callback])
	 	- 查詢全部符合條件的文檔 總會返回一個數組
	 Model.findById(id, [projection], [options], [callback])
	 	- 根據文檔的id屬性查詢文檔
	 Model.findOne([conditions], [projection], [options], [callback])
	 	- 查詢符合條件的第一個文檔 總和返回一個具體的文檔對象

 		conditions 查詢的條件
 		projection 投影 須要獲取到的字段
 			- 兩種方式
 				{name:1,_id:0}
 				"name -_id"
 		options  查詢選項(skip limit)
 				{skip:3 , limit:1}
 		callback 回調函數,查詢結果會經過回調函數返回
 					回調函數必須傳,若是不傳回調函數,壓根不會查詢

 */
//增:StuModel.create(doc, function(err){});
StuModel.create({
	name:"張三",
	age:16,
	address:"北京"
},function (err) {
	if(!err){
		console.log("插入成功");
	}
});

//查
StuModel.find({},"name age -_id", {skip:3 , limit:1} , function (err , docs) {
	if(!err){
		console.log(docs);
	}
});


/*
	修改
 Model.update(conditions, doc, [options], [callback])
 Model.updateMany(conditions, doc, [options], [callback])
 Model.updateOne(conditions, doc, [options], [callback])
 	- 用來修改一個或多個文檔
 	- 參數:
 		conditions 查詢條件
 		doc 修改後的對象
 		options 配置參數
 		callback 回調函數
 Model.replaceOne(conditions, doc, [options], [callback])
* */
StuModel.updateOne({name:"張三"},{$set:{age:20}},function (err) {
	if(!err){
		console.log("修改爲功");
	}
});


/*
	刪除:
 Model.remove(conditions, [callback])
 Model.deleteOne(conditions, [callback])
 Model.deleteMany(conditions, [callback])
 */
StuModel.remove({name:"李四"},function (err) {
	if(!err){
		console.log("刪除成功");
	}
});



/*
 Model.count(conditions, [callback])
 	- 統計文檔的數量的
 */
StuModel.count({},function (err , count) {
	if(!err){
		console.log(count);
	}
});


//建立一個Document
var stu = new StuModel({
	name:"奔波霸",
	age:48,
	gender:"male",
	address:"碧波潭"
});
stu.save(function (err) {
	if(!err){
		console.log("保存成功~~~");
	}
});

StuModel.findOne({},function (err , doc) {
	if(!err){
		/*
		 	update(update,[options],[callback])
		 		- 修改對象
		 	remove([callback])
		 		- 刪除對象

		 */
		//console.log(doc);
		/*doc.update({$set:{age:28}},function (err) {
			if(!err){
				console.log("修改爲功~~~");
			}
		});*/

		/*doc.age = 18;
		doc.save();*/

		/*doc.remove(function (err) {
			if(!err){
				console.log("大師兄再見~~~");
			}
		});*/


		/*
			get(name)
				- 獲取文檔中的指定屬性值
			set(name , value)
				- 設置文檔的指定的屬性值
			id
				- 獲取文檔的_id屬性值
			 toJSON() ******
			 	- 轉換爲一個JSON對象

			 toObject()
			 	- 將Document對象轉換爲一個普通的JS對象
			 		轉換爲普通的js對象之後,注意全部的Document對象的方法或屬性都不能使用了

		 */
		//console.log(doc.get("age"));
		//console.log(doc.age);

		//doc.set("name","豬小小");
		//doc.name = "hahaha";

		//console.log(doc._id);
		//var j = doc.toJSON();
		//console.log(j);

		//var o = doc.toObject();

		//console.log(o);

		doc = doc.toObject();

		delete doc.address;

		console.log(doc._id);

	}
});

建立Schema模式對象

var userSchema = new Schema(definition, option);
  • options經常使用選項
    • autoIndex 布爾值,開啓自動索引,默認true
    • bufferCommands 布爾值,緩存因爲鏈接問題沒法執行的語句,默認true
    • capped 集合中最大文檔數量
    • collection 指定應用Schema的集合名稱
    • id 布爾值,是否有應用於_id的id處理器,默認true
    • _id 布爾值,是否自動分配id字段,默認true
    • strict 布爾值,不符合Schema的對象不會被插入進數據庫,默認true
  • 定義Schema模式對象
    • 模式爲集合中的文檔定義字段和字段類型。
    • 對於在模式中的每一個字段,你都須要定一個特定的值類 型。受支持的類型以下:
      • String
      • Number
      • Boolean
      • Array
      • Buffer
      • Date
      • ObjectId或Oid
      • Mixed
    • 須要爲每一個不一樣的文檔類型都定義一個模式

建立Model模型對象

  • model(name, [schema], [collection] , [skipInit])
    • name參數至關於模型的名字,之後能夠同過name找到模型。
    • schema是建立好的模式對象。
    • collection是要鏈接的集合名。
    • skipInit是否跳過初始化,默認是false
  • model對象的方法
    • remove(conditions, callback)
    • deleteOne(conditions, callback)
    • deleteMany(conditions, callback)
    • find(conditions, projection, options, callback)
    • findById(id, projection, options, callback)
    • findOne(conditions, projection, options, callback)
    • count(conditions, callback)
    • create(doc, callback)
    • update(conditions, doc, options, callback)
    • ...

建立Document文檔對象

  • document對象的方法
    • equals(doc)
    • id
    • get(path,[type])
    • set(path,value,[type])
    • update(update,[options],[callback])
    • save([callback])
    • remove([callback])
    • isNew
    • isInit(path)
    • toJSON()
    • toObject()
    • ...
相關文章
相關標籤/搜索