路漫漫其修远兮:js的成长经历(二十五)—— Node.js中的MongoDB

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的基本指令(增删改查等)

//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:["h5+c3","js","jQuery", "abc"] , core:["三大框架","node.js"]}
//MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称这个文档叫做 内嵌文档
db.colleges.update({name:"html5"},{$set:{classes:{base:["h5+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链接数据库示例

// 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("数据库断开成功!");
});

运行结果
在这里插入图片描述

在数据库中写入文档

// 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中对数据增删改查

代码示例

// 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文档

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:博客之星2021 设计师:Hiro_C 返回首页
评论

打赏作者

不愿意做鱼的小鲸鱼

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值