MongoDB数据库学习以及在Node中操作MongoDB数据

在学习某个数据库之前,可以根据学习其他数据库的经验来问出数据库共有的问题,带着这些问题去学习一个新的数据库,有助于我们更快地学习。当然没学过数据库,也可以根据这些问题对数据库有整体的了解,从而在具体学习过程中更游刃有余。而且在学习完一段时间之后,有了这些问题能让你在一段时间之后,感觉学过却又什么记不起来时,顺着这些思路,快速捡起忘记的知识点。

首先我们需要了解一些数据库的基础知识。

1.什么是数据库?

数据库:database,存储数据的仓库
数据库:高效的存储和处理数据的介质(说白了就是把数据存在哪里,是磁盘呢还是内存呢)

2.数据库的分类?

可以按数据库的存储介质不同,来分类:存储在磁盘的是关系型数据库(SQL),存储在内存的是菲关系型数据库(NoSQL)

3.不同的数据库阵营中有哪些产品?

关系型数据库
大型:Oracle,DB2
中型:SQL-SERVER ,Mysql等
小型:Acess等

非关系型数据库:memcached,mongodb,redis等

4.两种数据库阵营的区别?

从分类中你已经知道,这两种数据库阵营的存储介质不同,关系型数据库存在磁盘中,菲关系型数据库存储在内存中。那存再磁盘和存在内存中有什么优缺点呢?很明显在学习计算机基础知识的时候,我们就知道存储在磁盘中的数据,即使断电关机了,也不会丢失,下次开机还是会找得到数据,而存储在内存中,数据是运行时产生的,一旦断电关机运行停止,数据也就消失了。但cpu向内存读取或写入的速度是高于磁盘的。还有就是关系型数据库是以行列(也就是二维表)形式存储在磁盘的,即使某li列为空也是占有空间的,所以比较浪费空间,而菲关系型数据库不存在这一点问题。
将上述分析的点总结一下就是:
关系型数据库:安全(保存在磁盘不易丢失),容易理解,比较浪费空间(二维表)
非关系型数据库:不安全(断电丢失),效率高(读写速度快)

了解了以上数据库基础知识点,现在我们开始进入学习具体数据库—MongoDB数据库之前的提问环节。脉络:哪种类型–安装–启动和关闭–连接和退出–基本命令(查看所有数据库、查看当前操作的数据库、切换到指定数据库进行操作、增删改查命令等)

1.MongoDB属于哪种类型数据库?基本概念?

非关系型数据库
可以有多个数据库,一个数据库中可以有多个集合(表),一个集合中又可以有多个文档(表记录),文档结构很灵活,没有任何限制。
MongoDB数据库非常灵活,不像Mysql数据库那样先创建数据库、表、设计表结构,只需要在插入数据的时候,指定在哪个数据库的哪个集合里操作就可以。而数据库和表都由MongoDB来自动完成。

2.安装好MongoDB数据库后,怎么启动和关闭数据库?

数据库本身也是一种服务器,因此跟服务器一样,需要启动之后,用户才能进行访问。
mongodb的启动命令是

# mongodb 默认使用执行mongod命令所在盘符的根目录下的/data/db作为自己数据的根目录
# 所以在第一次执行之前需要手动创建/data/db目录
mongod

既然看到有默认目录不是固定,那说明也能进行修改不使用默认的目录

mongod --dbpath=数据存储目录路径

停止mongodb

在开启服务器的控制台,直接Ctrl+c
或者直接关闭开启服务的控制台

3.连接和退出数据库

连接

# 该命令默认连接本地的mongodb服务
mongo

关闭

# 在连接状态输入exit退出连接
exit

4.基本命令

  • show dbs
    显示所有数据库
  • db
    查看当前操作的数据库
  • use 数据库名称
    切换到指定数据库(如果没有会新建)
  • db.dropDatabase()
    删除当前所操作的数据库
  • db.createCollection(“example”)
    创建一个example集合,类似关系型数据库中的表
  • db.example.drop()
    删除一个example集合
  • show tables
    查看所有集合
  • db.collection_name.insert(document)
    向集合中插入文档(就是插入数据)

实例:
向col集合插入文档

db.col.insert({
	name: "张三",
	age: 20
})

查看col集合已经插入的文档

db.col.find()

通过 update() 方法来更新name

db.col.update({'name':'张三'}, {$set:{'name':'王五'}})

删除name为“王五”的文档

db.col.remove({'name':'王五'})

更多命令可以查看官方文档

5.在Node中操作MongoDB数据

使用第三方mongoose来操作MongoDB数据库,mongoose是基于MongoDB官方包再一次做了封装。

6.Mongoose使用

大概流程:首先得安装,然后就是在node中引入数据库模块,接着需要连接上数据库

首先进行 安装

npm install mongoose

在node中使用

//引入mongoose
var mongoose = require('mongoose')

//连接数据库
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true})

//查看是否连接成功
var db = mongoose.connection
db.on('error', console.error.bind(console, 'connection error:'))
db.once('open', function () {
	  // we're connected!
})

//设计结合结构(表结构)
var userSchema = new mongoose.Schema({
	username: {
		type: String,
		required: true
	},
	password: {
		type: String,
		required: true
	},
	email: {
		type: String,
		required: true
	}
})

//将文档结构发布为模型(将结构加到集合中)
	mongoose.model()方法就是将一个结构发布为模型
	第一个参数:传入一个首字母大写的单数字符串表示集合名称
				mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称
				例如这里的User会自动变成users集合名称
	第二个参数:架构Schema
	返回值: 模型构造函数
var User = mongoose.model('User', userSchema)

//有了模型构造函数User,就可以对users集合里的数据进行操作
//增加数据
var admin = new User({
	username: 'admin',
	password: '123456',
	email: '[email protected]'
})

admin.save(function (err, ret) {
	if (err) {
		console.log('保存失败')
	} else {
		console.log('保存成功')
		console.log(ret)
	}
})

//查询所有数据
User.find(function (err, ret) {
	if (err) {
		console.log("查询失败")
	} else {
		console.log(ret)
	}
})
//根据条件查询
User.find({ username: 'admin'}, function (err, ret) {
	if (err) {
		console.log("查询失败")
	} else {
		console.log(ret)
	}
})
//查找第一个
User.findOne({ 
		username: 'admin'
	}, function (err, ret) {
		if (err) {
			console.log("查询失败")
		} else {
			console.log(ret)
		}
})

//删除数据
//根据条件删除所有
User.remove({ 
		username: 'admin'
	}, function (err, ret) {
		if (err) {
			console.log("删除失败")
		} else {
			console.log("删除成功")
		}
})

//更新数据
//根据id更新一个
User.findByIdAndUpdate('1', {
	password: "123"
}, function (err, ret) {
	if (err) {
			console.log("更新失败")
		} else {
			console.log("更新成功")
		}
})


更多方法可查看官方文档。

你可能感兴趣的:(node学习)