Mongoose常用语法

一.Mongoose的介绍

Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具.

 

在项目安装mongoose封装 :cnpm install mongoose --save

二.Mongoose常用语法

1.加载Mongoose模块

var mongoose = require('mongoose'); 

2.连接数据库

(1).connect()
mongoose.connect(uri(s), [options], [options.useMongoClient], [callback])

//引用mongoose
const mongoose = require('mongoose')
const URL = 'mongodb://localhost:27017/shop';
mongoose.connect(URL,function(err){
	if(err){
        console.log('数据库连接失败:'+err);
    }else {
        console.log('数据库成功连接到:'+ URL);
    }
});

 shop是数据库的集合 (这个项目的的数据库名)

(2).createConnection()

此方法获取数据库连接,操作database层面,返回一个Connection对象。Connection对象中包含model,collection,dropDatabase等操作数据库的方法,也包含connected,disconnected,error等事件触发方法。

const mongoose = require('mongoose')
const URL = 'mongodb://localhost:27017/shop';
//实际上只是创建了一个Connection对象,能够操作数据库,但是不能操作具体的document
var db = mongoose.createConnection(URL);

db.on('connected',function(err){
    if(err){
        console.log('连接数据库失败:'+err);
    }else{
        console.log('连接数据库成功!');
    }
})

(3).connection

connection是mongoose模块的默认引用,返回一个Connetion对象点击打开链接。因为connect()方法并不能监听数据库连接情况,所以,一般情况下此方法跟connet()方法搭配使用:

const mongoose = require('mongoose')
const URL = 'mongodb://localhost:27017/shop';
mongoose.connect(URL);
var db = mongoose.connection;//获取connection实例
//使用Connetion监听连接状态
db.on('connected',function(err){
    if(err){
        console.log('连接数据库失败:'+err);
    }else{
        console.log('连接数据库成功!');
    }
});

参考:mongoose中connect()、createConnection()和connection的区别和作用

3.数据连接成功 定义Schema表模型

比如goods商品表 

var produtSchema = new Schema({
	"productId":String,//定义一个字段productId,类型为String
	"productName":String,
	"prodcutPrice":Number,
	"prodcutImg":String
});
或是
var produtSchema = new Schema({
	"productId":{type: String, 'require': true},
	"productName":{type: String, 'require': false},
	"prodcutPrice":{type: Number, 'require': false},
	"prodcutImg":{type: String, 'require':false},
});
//通过mongoose的model把goods模块输出 //good表名 它会自动找到good并加s
module.exports = mongoose.model('Good',produtSchema);
	"productId":String,//定义一个字段productId,类型为String
	"productName":String,
	"prodcutPrice":Number,
	"prodcutImg":String
});
或是
var produtSchema = new Schema({
	"productId":{type: String, 'require': true},
	"productName":{type: String, 'require': false},
	"prodcutPrice":{type: Number, 'require': false},
	"prodcutImg":{type: String, 'require':false},
});
//通过mongoose的model把goods模块输出 //good表名 它会自动找到good并加s
module.exports = mongoose.model('Good',produtSchema);

 

类型:String  Number  Date Buffer Boolean Mixed Objectid Array    index :建索引 default:默认值

 

4.常用数据库操作

(1).查找数据find()

a.这是查找所有数据

查询mongoDB的goods数据
var Goods = require('../models/goods');
Goods.find({},function(err,doc){
	if(err){
		res.json({
			status:'1',
			msg:err.message
		})
	}else{
		res.json({
			status:'0',
			msg:'',
			result:{
				count:doc.length,
				list:doc
			}
		})
	}
})

b.按分页查找以及排序

查询mongoDB的goods数据
var Goods = require('../models/goods');
let currentPage = parseInt(req.param("page"));//当前是第几页
let pageSize = parseInt(req.param("pageSize"));//一页多少数据
let sort = req.param("sort");//排序
let skipNum = (currentPage-1)* pageSize;//跳过几条数据
let params = {};
let goodsModel = Goods.find(params).skip(skipNum).limit(pageSize).sort({'prodcutPrice':1});//find()查找数据
goodsModel.exec(function(err,doc){
	if(err){
		res.json({
			status:'1',
			msg:err.message
		})
	}else{
		res.json({
			status:'0',
			msg:'',
			result:{
				count:doc.length,
				list:doc 
			}
		})
	}

})

 

 

c.按照id查找

查询mongoDB的goods数据
var Goods = require('../models/goods');
var id = '5b20bee91e440d036027d320';
Goods.findById(id, function(err,doc){
	if(err){
		res.json({
			status:'1',
			msg:err.message
		})
	}else{
		res.json({
			status:'0',
			msg:'',
			result:{
				count:doc.length,
				list:doc
			}
		})
	}
})

d.模糊查找  产品名字带6的

查询mongoDB的goods数据
var Goods = require('../models/goods');
var whereStr = {'productName':{$regex:/6/i}};
Goods.find(whereStr, function(err,doc){
	if(err){
		res.json({
			status:'1',
			msg:err.message
		})
	}else{
		res.json({
			status:'0',
			msg:'',
			result:{
				count:doc.length,
				list:doc
			}
		})
	}
})

(2).增加数据  

a.方式通过mongobooster可视化工具执行语句

 db.goods.insert({"productId":"10001","productName":"小米6","prodcutPrice":2499,"prodcutImg":"mi6.jpg"})

b.express框架的router/goods.js

var Goods = require('../models/goods');
let mo = new Goods({
	"productId":"10011",
	"productName":"小米11",
	"prodcutPrice":4000,
	"prodcutImg":"10.jpg"
});
mo.save({}, (err, doc)=> {
	if (err) {
	    console.log(err);
	}else {
	    console.log(doc);
	}
});

 

c.用mongose的语法创建

 


//类似于mysql的表,mongo里面表结构,字段的创建(user表名,Schema里面是字段)
const User = mongoose.model('user',new mongoose.Schema({
	username:{type:String,require:true},
	nickname:{type:String,require:false},
	age:{type:Number,require:true}
}))

//新增数据
User.create({
	username:'小高',
	nickname:'nini',
	age:20
},function(err,doc){
	if(!err){
		console.log(doc)
	}else{
		console.log(err)
	}
})

 

(3).修改/更新 数据

a.findByIdAndUpdate,这种比较有指定性,就是根据_id

var Goods = require('../models/goods');
var id = '5b20c5296bfe282a48380f3e';
var updatestr = {'productName': '原名小米11搞成小米6'};
Goods.findByIdAndUpdate(id, updatestr, function(err, res){
    if (err) {
        console.log("Error");
    }
    else {
        console.log("修改成功");
    }
})

 

 

b.update()修改方法

var Goods = require('../models/goods');
var wherestr = {'productName' : '原名小米11搞成小米6'};
var updatestr = {'prodcutPrice':5674};
Goods.update(wherestr, updatestr, function(err, res){
    if (err) {
        console.log("Error");
    }
    else {
        console.log("修改成功");
    }
})

User.update({条件},{'$set':{修改的内容}},function(err,doc){})

User.update({'username':'小高'},{'$set':{age:25}},function(err,doc){
	if(!err){
		console.log(doc)
	}
})
//找到username为小高的人,修改年龄为25

更新子文档  $:代表数组的下标,例如只更新cartList数组中满足条件的元素

router.post("/carEdit",function(req,res,next){
	var userId = req.cookies.userId;
	var productId = req.body.productId;
	var productNum = req.body.productNum;
	var checked = req.body.checked;
	User.update({
		//这个是查询的条件
		userId:userId,
		"cartList.productId":productId
	},{//更新子文档  $:代表数组的下标,例如只更新cartList数组中满足条件的元素
		"cartList.$.productNum":productNum,
		"cartList.$.checked":checked
	},function(err,doc){
		if(err){
			res.json({
				status:"1",
				msg:err.message
			})
		}else{
			if(doc){
				res.json({
					status:"0",
					msg:"",
					result:'更新成功'
				})

			}
		}
	})

})

 

其它更新方法
Model.findOneAndUpdate([conditions], [update], [options], [callback])      //找到一条记录并更新

 

(4).删除数据

var Goods = require('../models/goods');
var wherestr = {'productName' : '原名小米11搞成小米6'};
Goods.remove(wherestr,function(err, res){
    if (err) {
        console.log("Error");
    }
    else {
        console.log("删除成功");
    }
})

User.update({//这个是查询的条件},{   $pull:删除指定数据,例如对指定userId下的cartList数组删除其中指定的productId
$pull:{'cartList':{'productId':productId}}}

//购物车删除
router.post("/carDel",function(req,res,next){
	var userId = req.cookies.userId;
	var productId = req.body.productId;
	User.update({
		//这个是查询的条件
		userId:userId
	},{//删除条件    $pull:删除指定数据,例如对指定userId下的cartList数组删除其中指定的productId的元素        
		$pull:{
			'cartList':{
				'productId':productId
			}
		}
	},function(err,doc){
		if(err){
			res.json({
				status:"1",
				msg:err.message
			})
		}else{
			if(doc){
				res.json({
					status:"0",
					msg:"",
					result:'删除成功'
				})

			}
		}
	})

})

其它常用方法还有: 

 

Model.findByIdAndRemove(id, [options], [callback])      
Model.findOneAndRemove(conditions, [options], [callback])

 

参考例子

1.基于vue2+node+express+mongoDB 获取商量列表查询接口

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mongoose是一个Node.js的MongoDB对象模型工具。使用Mongoose可以更简便地操作和管理MongoDB数据库。在使用Mongoose的过程中,常用语法有以下几个方面: 1. 加载Mongoose模块:在项目中使用Mongoose之前,需要先安装Mongoose。可以使用npm命令进行安装,如[cnpm install mongoose --save]。 2. 定义Schema:Schema是MongoDB中的一种数据结构,可以用来定义集合中的字段、类型和验证规则。通过Mongoose,可以使用以下语法定义Schema和字段的类型、默认值和验证规则。 3. 创建Model:Model是Mongoose对Schema的封装,可以使用Model来对集合进行增删改查等操作。通过Mongoose,可以使用以下语法创建Model,并进行增删改查等操作。 4. 连接数据库:在使用Mongoose之前,需要先连接MongoDB数据库。可以使用以下语法进行数据库连接。 5. 保存数据:可以使用Model的save()方法将数据保存到MongoDB数据库中。 6. 查询数据:可以使用Model的find()、findOne()等方法进行数据查询。 7. 更新数据:可以使用Model的updateOne()、updateMany()等方法进行数据更新。 8. 删除数据:可以使用Model的deleteOne()、deleteMany()等方法进行数据删除。 以上是Mongoose的一些常用语法,可以根据需要进行使用和学习。希望对您有所帮助。 : 引用自 中的内容 : 引用自 中的内容 : 引用自 中的内容<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mongoose常用语法](https://blog.csdn.net/gao_xu_520/article/details/80674978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [MongoDB上手之mongoose](https://blog.csdn.net/weixin_33768153/article/details/84477951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [mongoose-tsgen:用于Mongoose的即插即用Typescript接口生成器](https://download.csdn.net/download/weixin_42164534/15032859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值