mongoose学习记录(js中连接数据库,并进行增删改查)

作用:Mongoose是一个让我们可以通过Node来操作MongoDB的模块。 Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。mongoose中为我们提供了几个新的对象。

Schema(模式对象)

  • Schema对象定义约束了数据库中的文档结构

Model

  • Model对象作为集合中的所有文档的表示,相当于
    MongoDB数据库中的集合collection

Document

  • Document表示集合中的具体文档,相当于集合中
    的一个具体的文档

使用:

下载安装Mongoose

npm i mongoose --save

在项目中引入mongoose

var mongoose = require("mongoose");

连接MongoDB数据库

mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名', { useMongoClient: true});

注:如果端口号是默认端口号(27017) 则可以省略不写

断开数据库连接(一般不需要调用)

MongoDB数据库,一般情况下,只需要连接一次,连接一次以后,除非项目停止服务器关闭,否则连接一般不会断开

mongoose.disconnect()

监听MongoDB数据库的连接状态

在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接,通过监视该对象的状态,可以来监听数据库的连接与断开

数据库连接成功的事件
mongoose.connection.once("open",function(){});

数据库断开的事件
mongoose.connection.once("close",function(){});

测试数据库的连接:

//引入
var mongoose = require("mongoose");
//连接数据库
mongoose.connect("mongodb://xxxxxxxx/test" , { useMongoClient: true});

mongoose.connection.once("open",function(){
	console.log("数据库连接成功~~~");
});

mongoose.connection.once("close",function(){
	console.log("数据库连接已经断开~~~");
});

//断开数据库连接
mongoose.disconnect();

通过Schema来创建Model

Model代表的是数据库中的集合,通过Model才能对数据库进行操作:

  • mongoose.model(modelName, schema):

modelName 就是要映射的集合名 mongoose会自动将集合名变成复数

//引入
var mongoose = require("mongoose");

//连接数据库
mongoose.connect("mongodb://xxxxxxx/test" , { useMongoClient: true});
mongoose.connection.once("open", function() {
	console.log("数据库连接成功~~~");
});


//将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);



//向数据库中插入一个文档
//StuModel.create(doc, function(err){});
StuModel.create({
	name: "白骨精",
	age: 16,
	address: "白骨洞"
}, function(err) {
	if(!err) {
		console.log("插入成功~~~");
	}
});

Model的操作

有了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 回调函数,查询结果会通过回调函数返回。回调函数必须传,如果不传回调函数,压根不会查询

var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connection.once("open",function () {
	console.log("数据库连接成功~~~");
});

var Schema = mongoose.Schema;

var stuSchema = new Schema({
	name:String,
	age:Number,
	gender:{
		type:String,
		default:"female"
	},
	address:String
});

var StuModel = mongoose.model("student" , stuSchema);

StuModel.find({name:"唐僧"},function (err , docs) {
	if(!err){
		console.log(docs);
	}
});


//只要name不要id
StuModel.find({},{name:1 , _id:0},function (err , docs) { 
	if(!err){
		console.log(docs);
	}
});

//要name和age,不要id。分页
StuModel.find({},"name age -_id", {skip:3 , limit:1} , function (err , docs) {
	if(!err){
		console.log(docs);
	}
});

StuModel.findOne({} , function (err , doc) {
	if(!err){
		console.log(doc);
	}
});

StuModel.findById("59c4c3cf4e5483191467d392" , function (err , doc) {
	if(!err){
		//console.log(doc);
		//通过find()查询的结果,返回的对象,就是Document,文档对象
		//Document对象是Model的实例
		console.log(doc instanceof StuModel);
	}
});

//直接通过Model来 创建对象
StuModel.create([
	{
		name:"沙和尚",
		age:38,
		gender:"male",
		address:"流沙河"
	}

],function (err) {
	if(!err){
		console.log(arguments);
	}
});


修改:
 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])


//修改唐僧的年龄为20
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认识

Document 和 集合中的文档一一对应 , Document是Model的实例通过Model查询到结果都是Document

document的方法:

  • Model#save([options], [fn]):将修改的内容保存到数据库中
  • update(update,[options],[callback]):修改对象
  • remove([callback]): 删除对象
  • get(name):- 获取文档中的指定属性值
  • set(name , value):设置文档的指定的属性值
  • id: 获取文档的_id属性值
  • toObject(): 将Document对象转换为一个普通的JS对象,转换为普通的js对象以后,注意所有的Document对象的方法或属性都不能使用
//连接数据库,创建 Schema 和 Model

var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});
mongoose.connection.once("open",function () {
	console.log("数据库连接成功~~~");
});

var Schema = mongoose.Schema;

var stuSchema = new Schema({
	name:String,
	age:Number,
	gender:{
		type:String,
		default:"female"
	},
	address:String

});
var StuModel = mongoose.model("student" , stuSchema);



//创建一个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){
		doc.update({$set:{age:28}},function (err) {
	      if(!err){
		     console.log("修改成功~~~");
	      }
    }
});
doc.age = 18;
doc.save();//必须调用SAVE方法才能修改数据库

doc.remove(function (err) {
	if(!err){
		console.log("大师兄再见~~~");
	}
});


mongoDB官方文档

猜你喜欢

转载自blog.csdn.net/qq_40844662/article/details/108726435