MongoDB简介
- MongoDB是为快速开发互联网Web应用而设计的数据库系统。
- MongoDB的设计目标是极简、灵活,经常在Web应用栈的业务层被运用。
- MongoDB的数据模型是面向文档的,类似于JSON的结构,MongoDB这个数据库中存的是各种各样的BSON # MongoDB安装教程 (ps:安装好之后配置环境变量,启动MongoDB服务) # mongoDB基本组成
- 数据库(database):数据库是一个仓库,在仓库中可以存放集合。
- 集合(collection):集合类似于数组,在集合中可以存放文档。
- 文档(document):文档数据库中的最小单位,我们存储和操作的内容都是文档。
mongoDB的基本指令
show dbs: 显示当前所有的数据库 use 数据库名 ":进入到指定数据库中 db :显示当前所在的数据库 show collections:显示数据库中的所有集合
安装可视化操作软件
mongodbmanagerpro_inst.exe下载链接 软件自行成功安装之后,可以直接打开MongoDB的可视化工具使用MongoDB 效果如图所示
# 熟悉使用MongoDB的基本指令(增删改查等)
代码语言:javascript复制//1.创建并进入it_666数据库
use it_KT
//2.向数据库的colleges集合中插入六个文档(Html5, Java, Python, 区块链, K12, <PHP, "世界上最好的编程语言">)
db.colleges.insert([
{ name:"html5"},
{ name:"java"},
{ name:"python"},
{ name:"区块链"},
{ name:"K12"},
{ name:"PHP", intro:"世界上最好的编程语言"}
]
);
//3.查询colleges集合中的文档
db.colleges.find();
//4.向数据库的colleges集合中插入一个文档(Golang)
db.colleges.insert({
name:"html5"
});
//5.统计数据库colleges集合中的文档数量
db.colleges.find().count();
//6.查询数据库colleges集合中name为Html5的文档
db.colleges.find({name:"html5"});
//7.向数据库colleges集合中的name为Html5的文档,添加一个intro属性,属性值为"打通全栈任督二脉!"
db.colleges.update({name:"html5"},{$set:{address:"打通全栈任督二脉!"}});
//8.使用{name:"大数据"} 替换 name 为 "K12"的文档
db.colleges.replaceOne({name:"K12"},{username:"大数据"});
//9.删除name为PHP的文档的intro属性
db.colleges.update({name:"PHP"},{$unset:{intro:"世界上最好的编程语言"}});
//10.向name为Html5的文档中,添加一个classes:{base:["h6 c3","js","jQuery", "abc"] , core:["三大框架","node.js"]}
//MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称这个文档叫做 内嵌文档
db.colleges.update({name:"html5"},{$set:{classes:{base:["h6 c3","js","jQuery", "abc"], core:["三大框架","node.js"]}}});
db.colleges.find();
//11.查询有核心课程为 三大框架 的文档
//MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配
//如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号
db.colleges.find({'classes.core':"三大框架"});
//12.向name为Html5的文档中,添加一个新的核心课程 "微信小程序"
//$push 用于向数组中添加一个新的元素
//$addToSet 向数组中添加一个新元素 , 如果数组中已经存在了该元素,则不会添加
db.colleges.update({name:"html5"},{$push:{"classes.core":"微信小程序"}});
db.colleges.update({name:"html5"},{$addToSet:{"classes.core":"微信小程序"}});
db.colleges.find();
//13.向name为Html5的文档中,删除基础课程"abc"
db.colleges.update({name:"html5"},{$pop:{"classes.base":"abc"}});
//14.删除user集合
db.colleges.remove({});
db.colleges.drop();
show dbs;
use test1
//15.向集合中中插入10000个文档 7.2s
for(var i=1 ; i<=10000 ; i ){
db.demos.insert({num:"我是第" i "个数据"});
}
db.demos.remove({});
var arr = [];
for(var i=1 ; i<=10000 ; i ){
arr.push({num:i});
}
db.demos.insert(arr);
db.demos.find();
//16.查找num为666的数据
db.demos.find({num:666});
//17.查找num小于666的数据
db.demos.find({num:{$lt:666}});
//18.查找num大于666的数据
db.demos.find({num:{$gt:666}});
//19.查找num大于66,小于666的数据
db.demos.find({num:{$gt:66,$lt:666}});
//20.查看demos集合中的前10条数据
db.demos.find({num:{$lte:10}});
//21.查看demos集合中的第11条到20条数据
db.demos.find().skip(10).limit(10);
//22.查看demos集合中的第21条到30条数据
db.demos.find().skip(20).limit(10);
db.demos.find().limit(10).skip(10);
show dbs
// 创建数据库
use company
db
db.it666.insert([
{cno: "1001", cname: "HTML5学院"},
{cno: "1002", cname: "Python学院"},
{cno: "1003", cname: "Java学院"},
{cno: "1004", cname: "Go学院"}
]);
db.section.insert([
{name: "胡雪", job: "辅导员", wages: 10000.0, cno: "1001", bonus: 1688},
{name: "赵乐乐", job: "讲师", wages: 20000.0, cno: "1001", bonus: 2600},
{name: "冯璐璐", job: "辅导员", wages: 12000.0, cno: "1001"},
{name: "赵晓雪", job: "辅导员", wages: 12000.0, cno: "1002", bonus: 1688},
{name: "孙芙蓉", job: "讲师", wages: 13000.0, cno: "1002", bonus: 1288},
{name: "胡霍恋", job: "辅导员", wages: 11000.0, cno: "1003", bonus: 2688},
{name: "张思琪", job: "班主任", wages: 9000.0, cno: "1003"},
{name: "王红叶", job: "辅导员", wages: 8000.0, cno: "1002", bonus: 1675},
{name: "叶子奇", job: "高级讲师", wages: 30000.0, cno: "1001", bonus: 2345},
{name: "高伟伟", job: "辅导员", wages: 17000.0, cno: "1002", bonus: 1345}
]);
/*
db.section.remove({});
db.it666.remove({});
db.section.find();
db.it666.find();
*/
//23. 创建company数据库, 将it666和section集合导入到数据库中
db.it666.find()
db.section.find()
//24.查询HTML5学院的所有老师
//(cno)
var cno=db.it666.findOne({"cname":"HTML5学院"}).cno;
db.section.find({"cno":cno});
//25.查询Java学院的所有员工
var cno = db.it666.findOne({cname:"Java学院"}).cno;
db.section.find({cno:cno});
//26.查询工资大于20000的员工
db.section.find({wages:{$gt:20000}});
//27.查询工资在10000-20000之间的员工
db.section.find({wages:{$lt:20000 , $gt:10000}});
//28.查询工资小于10000或大于25000的员工
db.section.find({$or:[{wages:{$lt:10000}} , {wages:{$gt:25000}}]});
//29.为所有薪资低于10000的员工增加工资1000元
db.section.updateMany({wages:{$lte:10000}} , {$inc:{wages:1000}});
db.section.find();
//30.根据工资升序查询
db.section.find().sort({wages: 1, cno:1});
//31.根据工资降序查询
db.section.find().sort({wages: -1, cno:-1});
//32.索引:在部分需求中, 有时候我们只需要一个文档中的部分数据, 这时候就得通过映射在查询时, 可以在第二个参数来设置查询的结果投影
db.section.find({}, {name: 1, _id: 0, wages: 1, bonus: 1});
Node进阶-Mongoose
什么是Mongoose
之前我们都是通过命令行或者shell来完成对数据库的各种操作的,但在开发中大部分时候我们都需要通过程序来完成对数据库的操作。 而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块。
mongoose的相关概念
mongoose中提供了几个新的对象: Schema(模式对象):Schema对象定义约束了数据库中的文档结构 Model:Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection Document: Document表示集合中的具体文档
mongoose使用步骤
1.下载安装Mongoose: npm i mongoose --save 2.在项目中引入mongoose:let mongoose = require("mongoose"); 3.连接MongoDB数据库:mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名'); 如果端口号是默认端口号(27017) 则可以省略不写 4. 监听MongoDB数据库的连接状态:在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接, 通过监视该对象的状态,可以来监听数据库的连接与断开 mongoose.connection.once("open",function(){}); mongoose.connection.once("close",function(){});
Node.js使用mongoose链接数据库示例
代码语言:javascript复制// 1. 引入模块
let mongoose = require("mongoose");
mongoose.connect('mongodb://localhost/m_test1');
// 2. 监听各种状态
let db = mongoose.connection;
db.on('error', () => {
console.log("连接失败!");
});
db.once('open', function() {
console.log("连接成功!");
});
db.once('close', function() {
console.log("数据库断开成功!");
});
运行结果
在数据库中写入文档
代码语言:javascript复制// 1. 连接数据库
let mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/hzw_data");
mongoose.connection.once("open", () => {
console.log("数据库连接成功")
});
// 2. 创建Schema(模式对象)
let Schema = mongoose.Schema;
let personSchema = new Schema({
name: String,
age: Number,
sex: {
type: String,
default: "男" //设置默认值
},
chat: String
});
// 3. 创建Model对象
let personModel = mongoose.model("hzw", personSchema);
// 4. 插入文档
personModel.create({
name: "蒙奇D路飞",
age: 20,
chat: "我是要成为海贼王的男人"
}, (err) => {
if (!err) {
console.log("插入成功")
} else {
throw err; //抛出异常
}
});
personModel.create({
name: "罗罗诺亚索隆",
age: 21,
chat: "九山八海一世界,集千为小千世界,三乘相结,无斩不断之物。",
sex: "男"
}, (err) => {
if (!err) {
console.log("插入成功")
} else {
throw err;
}
});
运行结果
插入结果
Node.js中对数据增删改查
代码示例
代码语言:javascript复制// 1. 连接数据库
let mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/hzw_data");
mongoose.connection.once("open", () => {
console.log("数据库连接成功")
});
// 2. 创建Schema(模式对象)
let Schema = mongoose.Schema;
let personSchema = new Schema({
name: String,
age: Number,
sex: {
type: String,
default: "男"
},
chat: String
});
// 3. 创建Model对象
//person是数据库集合的名称
let personModel = mongoose.model("hzw", personSchema);
// 4. 增删改查
// 4.1 增加
/* personModel.create([
{ name: "香吉士", age: 18, chat: "能原谅女人谎言的男人才是男人" },
{
name: "乌索普",
age: 20,
chat: "路飞是要成为海贼王的男人 "
},
{
name: "娜美",
age: 21,
chat: "遇到迷茫时,任何人都会变得软弱",
sex: "女"
},
{
name: "乔巴",
age: 6,
chat: "路飞,为了你,我要成为最强的怪物。"
}
], (err) => {
if (!err) {
console.log("插入成功")
} else {
throw err;
}
});
*/
// 4.2 查
//第二个对象的第一个参数是是否错误,第二个参数是查询到的数据
/* personModel.find({}, (err, docs) => {
if (!err) {
console.log(docs);
console.log(typeof docs);
}
}); */
//条件查询
/* personModel.find({ name: "乔巴" }, (err, docs) => {
if (!err) {
console.log(docs);
console.log(typeof docs);
}
}); */
//筛选查询
/* personModel.find({}, { name: 1, _id: 0, sex: 1 }, (err, docs) => {
if (!err) {
console.log(docs);
console.log(typeof docs);
} else {
throw err
}
}); */
//只查找姓名
/* personModel.find({}, {
name: 1
}, (err, docs) => {
if (!err) {
console.log(docs);
}
}); */
//筛选和条件查询的两种写法
//第一种写法
/* personModel.find({}, "-_id name sex chat", { skip: 5, limit: 5 }, (err, docs) => {
if (!err) {
console.log(docs);
console.log(typeof docs);
} else {
throw err
}
}); */
//第二种写法
/* personModel.find({}, { _id: 0, name: 1, chat: 1, sex: 1 }, {
skip: 5,
limit: 5
}, (err, docs) => {
if (!err) {
console.log(docs);
console.log(typeof docs);
} else {
throw err
}
}); */
// 4.3 修改
//multi: true:表示修改符合修改条件的所有数据
/* personModel.update({ name: "乔巴" }, { $set: { age: 20 } }, { multi: true }, (err) => {
if (!err) {
console.log("修改成功");
} else {
throw err
}
}); */
// 4.4 删除
/*
Model.deleteMany()//删除多个
Model.deleteOne()//只删除一个
Model.remove()
*/
/* personModel.remove({ name: "乌索普" }, (err) => {
if (!err) {
console.log("删除成功");
} else {
throw err
}
});
personModel.find({}, (err, docs) => {
if (!err) {
console.log(docs)
} else {
throw err
}
}) */
// 4.5 统计文档的个数
/*
Model.count()
*/
personModel.count({}, (err, count) => {
if (!err) {
console.log(count);
}
});
遇到问题可以查看api
MongoDB教程
mongoose的API文档