MongoDB使用教程

MongoDB的基本概念:

MongoDB优点在于和node结合的非常好,可以通过js代码实现增删改查,避免了烦人的SQL语句(nodejs也能操作mysql)

  • 数据库
  • 集合  collection(相当于其他数据库的表)
  • 文档

理解:将整个MongoDB看作一个整体(比如对象),每个数据库就是其中的一个对象(qq),,每个集合相当于数据库对象中的一个数组(users),每个文档就是表中的一个对象,文档中可以放很多东西

一个MongoDB可以有多个数据库,一个数据库可以有多个集合,一个集合可以有多个表,一个表可以有多个文档

{
	qq: {
		users: [
			{name:"张三" , age: 18},
			{name:"李四" , age: 18},
		],
		products: [


		]

	},

	taobao: {

	},
}

 

MongoDB非常灵活,不需要像Mysql一样要先创建数据库,表,设计表结构,当你需要插入数据的时候,只需要指定往哪个数据库哪个集合操作就可以了,MongoDB会自动帮你完成建库建表的操作 

 

 

MongoDB安装后启动操作:

1.cmd命令启动执行数据库

1.mongod  (开启数据库),这里就相当于Mysql启动了服务

这句执行后会去当前执行的盘符(C)下面找data/db文件夹,这里就是MongoDB的数据存储目录,但是这个目录默认不会创建,启动不会成功,所以要手动生成 /data/db,这样才能启动服务

mkdir data

cd data

mkdir db

mongod

如果要修改默认的数据存储目录路径(但是每次启动都要这么输入,很麻烦,不推荐)

mongod --dbpath=数据存储路径

停止服务 ctrl + c 或者直接关掉cmd命令行

2.重新打开一个cmd命令行,不要关掉刚才那个

mongo (该命令默认连接本机Mongod 服务) 

exit(该命令断开连接本机Mongod 服务)

基本命令:

show dbs 

查看所有数据库列表(空的数据库不会显示),默认有一个admin的系统数据库

一般服务器操作步骤:创建数据库,创建表,写入数据,但MongoDB是动态的

 

db

查看当前操作的数据库,默认有个test空数据库

 

use + 数据库名称

切换到指定数据库,如果没有会新建,切换到的数据库可以通过db命令查看到

例如:use itcast

db   ==> itcast  (db现在是itcast这个数据库)

 

db.students.insertOne({"name":"Helen"})   

给这个数据库中插入数据

 

show dbs 

就能看见这个数据库了,如果数据库是空的是看不到这个数据库的

 

show collections  ==> students

显示当前(db指向的数据库itcast)db的所有集合

 

db.students.find() ==> {"id":adasd231 ,"name":"Helen"} 

查询students集合中的所有数据,会自动加上id值

 

注意:上面操作的重点是启动数据库服务,但是通过cmd命令行增删改查数据太麻烦,所以我们在nodejs中通过第三方包来操作数据库,上面的数据库服务要一直开启

2.通过nodejs操作MongoDB

官方的github说明文档https://github.com/mongodb/node-mongodb-native 可以自己学习下

 

官方用法比较原始,用起来比较麻烦,

使用第三方mongoose来操作MongoDB数据库,

mongoose是基于MongoDB官方的MongoDB包再做了一次封装,使用更加方便

官方文档:https://mongoosejs.com/docs/models.html

1.安装mongoose第三方包

$ npm install mongoose

  

2.通过mongoose第三方包提供的API来创建连接数据库,设计表的结构,增删改查数据

var mongoose = require(‘mongoose‘);

//Schema就是表的结构,架构
var Schema = mongoose.Schema;


//步骤一:连接数据库,连接的是本地itcast这个数据库
//如果这个数据库不存在,当你插入第一条数据后回自动创建
mongoose.connect(‘mongodb://localhost/itcast‘);

//步骤二:通过Schema设计集合的结构(表结构),设计集合的目的是规定这个表有几项,每项的属性名和数据类型,保持数据完整性,防止什么数据都往一个表里写
//字段名称就是表结构中的属性名称
//字段后面的对象叫做约束,用来设定这项属性的数据类型,是否为必填项等等,(和EasyUI用法有点像)

var userSchema = new Schema({
	username: {
		type : String ,
		required: true  //说明这项必填
	},
	password: {
		type: String ,
		required: true
	},
	email: {
		type: String
	}
})

//步骤三:将文档结构发布为模型
//mongoose.model方法用来将一个架构发布为模型
//第一个参数:传入一个大写的单数字符串用来表示你的数据库名称,mongoose会自动将其转化为小写复数的集合名称,如User => users
//第二个参数:架构Schema
//返回值:模型构造函数
var User = mongoose.model(‘User‘ , userSchema);


// 步骤四:通过模型构造函数对users集合进行增删改查
// ====================================增加数据=====================================
var admin = new User({
	username: ‘admin‘,
	password: ‘123345‘,
	email: ‘xxx163.com‘
})

//保存数据
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);;
	}
});

//查找满足条件的所有数据
//传入一个对象,根据对象中的这个属性查询对应的数据,这里查询username为‘admin‘的数据,得到的是数组
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:‘张三‘
},function(err,ret){
	if (err) {
		console.log(‘删除失败‘);
	} else {
		console.log(‘删除成功‘);
	}
})
//官网提供了两个删除方法:deleteOne() and deleteMany() 效果同上
// ================================更新数据=========================================
User.updateOne({username: ‘张三‘} , { password: ‘666‘} , function(err ,ret){
	if (err) {
		console.log(‘更新失败‘);
	} else {
		console.log(‘更新成功‘);
		console.log(ret);
	}
})
//应该还有update方法用来更新有数据,可以试一下

// 通过id查找并更新,这个ID是生成数据的时候产生的,可以通过find查询数据得到
User.findByIdAndUpdate(‘5jkdsah67ksjdn‘ , { password: ‘666‘} , function(err ,ret){
	if (err) {
		console.log(‘更新失败‘);
	} else {
		console.log(‘更新成功‘);
		console.log(ret);
	}
})

  

  

  

 

MongoDB使用教程

上一篇:回去等通知吧, 连sql的执行顺序都不知道?


下一篇:让我们和mysql谈场恋爱, 做一个整整懂她的男人!