MongoDB 基础

172 阅读4分钟

引言

在当今快速发展的互联网时代,数据的存储和处理变得尤为重要。MongoDB作为一种先进的NoSQL数据库,以其卓越的性能、灵活的数据模型和简洁的操作方式,赢得了开发者们的广泛青睐。本文将详细介绍MongoDB的基本概念、Node服务端的使用技巧,以及如何通过关联查询来优化数据操作。我们将深入探讨如何利用Mongoose模块简化数据库操作,构建高效的数据模型,并实现数据的快速存取。通过本文的阅读,读者将能够掌握MongoDB在Node.js环境中的高效应用,为构建强大的后端服务打下坚实的基础。

简介

  • MongoDB是一种常用的NoSQL数据库。它功能强大,性能卓越,易于学习和开发。与JavaScript关系非常密切。

  • NoSQL不是没有SQL,而是Not Only SQL,即不仅仅是SQL。

  • MongoDB是文档数据库,适合存储大量数据并提供高性能存取。

Node服务端使用

  • 使用 npm install mongoose --save 安装模块。

  • 加载mongoose模块

var mongoose = require('mongoose')
  • 使用connect()连接到MongoDB服务的某个数据库
//mongodb 是 MongoDB使用的服务协议
mongoose.connect('mongodb://localhost/H5-3')
  • 获取连接到的数据库对象
var db  =  mongoose.connection;
  • 数据库操作之前要先打开数据库
db.on('error',()=>{
	
	console.log('数据库打开失败')
})

db.on('open',()=>{
	
	console.log('数据库打开成功')
})
  • mongoose.model()设置要保存的数据模型,并设置该模型要保存到的数据库集合名称
  • 参数1:集合名称,参数2:数据模型的形状/详细信息
  • 返回值是数据库集合的模型类
var Students =  mongoose.model('students',{
	name:String,
	age:Number,
	ismale:Boolean
})
  • 构建数据库集合的模型对象,同时往该模型中注入数据
var aStudent =  new Students({name:"roy",age:28,ismale:true})
  • save 保存数据,注意一个数据多次save,数据库里会重复添加。
aStudent.save((err)=>{
	
	if(err){
		
		console.log('数据库保存失败')
	}
	else{
		
		console.log("数据保存成功")
	}
})
  • schema :构建数据模型的形状的配置方法
  • Model:是使用Schema构建的数据模型类。model具有操作数据库的能力。
  • Entity: 实体,它是指使用Model构建的数据模型对象。它也具有数据库操作能力。

//创建schema,它是数据模型的形状
var schema = mongoose.Schema({
	name:String,
	sex:String,
	age:Number,
	phone:String,
	email:String,
	desc:String,
	createTime:Date,
	updateTime:Date
})
  • 构建数据模型类(创建集合)
//在数据库中创建students集合
var Student = mongoose.model('students',schema)
  • find():查询集合中的所有数据
  • select():查询指定的数据
  • exec(): excute 执行查询操作
app.get('/',(req,res)=>{
	
	//Student.find()查询集合中的所有数据
	//select()是选择性查询,即查询指定的数据
	//exec: excute 执行查询操作.
	Student.find().select('name sex age phone email').exec(function(err,data){
		if(err){
			
			res.json({result:0,msg:"fail"})
		}
		else{
			
			data =  data.map(function(item){
				
				//toObject()转化为js对象
				item  = item.toObject()
				
				//toString()转化为字符串格式
				item.id = item._id.toString()
				
				delete item._id
				
				return item
			})
			
			console.log(data)
			
			//res.json({result:1,msg:"success",data:data})
			res.render('index',{data})
		}
	})
})

关联查询

  • 由于MongoDB是类似于excel表格,两个表格之间相互关联,就可以进行关联查询。
  • 关联两个表格,首先要在语法糖中设置关联的表格
//设置Student关联classes集合
var Student = mongoose.model('students',{
	
	name:String,
	age:Number,
	sex:String,
	//一旦使用populated()进行关联查询,需要设置某一个关联属性的type和ref配置信息。
	//其中type是关联的某一个集合的id(值为ObjectId)。ref:是关联的集合名称
	classId:{type:'ObjectId',ref:"classes"}
})
  • populated()方法把两个集合之间的数据通过某个属性关联起来,例如:创建完classes实例之后,默认有一个ObjectId的属性,将Student的ClassId与这个属性值相同,这两个集合就关联起来了。

image.png

//创建classes集合
var Classes = mongoose.model('classes',{
    className:String,
    course:String,
    count:Number
})

var aClass = new Classes({
    className:'H5-3',course:'web前端开发',count:14
})

//获取其ObjectId,赋给ClassId
var aStudent = new Student({name:'roy',age:25,sex:'男',classId:'5949d8b58619a80b809f1fdf'})

//使用populated关联
//该方法用来关联某一个属性信息,根据该属性的配置信息进而查询对应的数据,最后会把关联的数据和当前数据放入一个对象内返回。
Student.find({name:'roy'}).populate('classId').exec(function(err,data){
    if(!err){
        console.log(data)
    }
})

image.png

总结

总的来说,MongoDB和Mongoose为Node.js开发者提供了强大的数据库操作工具,使得处理复杂数据变得更加简单和高效。掌握这些技术,将有助于开发者构建更加健壮和可扩展的应用程序。