1、回顾

2、node + mongodb

2.1 安装mongodb

项目中既可以使用mongodb,但是推荐使用mongoose

cnpm i mongoose@4 -S

2.2 连接数据库

一定要确保数据库连接池是打开的

创建db.js

const mongoose = require('mongoose'); // 引入模块
const DB_URL = 'mongodb://localhost:27017/sh1908'; // 数据库连接地址 // 连接数据库
// mongoose.connect(DB_URL);
mongoose.connect(DB_URL, { useNewUrlParser: true }); //先版本要加 { useNewUrlParser: true } // 数据库连接成功
mongoose.connection.on('connected', () => {
console.log('数据库连接成功')
}) // 数据库断开或者连接失败
mongoose.connection.on('disconnected', () => {
console.log('数据库断开')
}) // 数据库连接异常
mongoose.connection.on('error', () => {
console.log('数据库连接异常')
})

2.3 将 db.js 封装成模块,供后续业务逻辑使用

const mongoose = require('mongoose');
const DB_URL = 'mongodb://localhost:27017/sh1908'; mongoose.connect(DB_URL, { useNewUrlParser: true }); mongoose.connection.on('connected', () => {
console.log('数据库连接成功')
}) mongoose.connection.on('disconnected', () => {
console.log('数据库断开')
}) mongoose.connection.on('error', () => {
console.log('数据库连接异常')
}) // 将此文件作为一个模块 暴露出去,供别人调用 ++++++++++++++++++++++++++++++++
module.exports = mongoose;

2.4 设计用户的集合 --- 设计表

const mongoose = require('./../db.js'); // 引入数据库连接模块
const Schema = mongoose.Schema; // 拿到当前数据库相应的集合对象 // 设计用户表的集合
const userSchema = new Schema({ // 设计用户集合的字段以及数据类型
username: { type: String },
password: { type: String },
age: { type: Number },
lesson: { type: Number },
sex: { type: Number },
city: { type: String },
company: { type: String }
}) // 无则创建数据库集合并且连接,有则连接,并且暴露出去\
// mongoose.model('User', userSchema); 创建出一个数据库集合 users
// mongoose.model('Test', userSchema); 创建出一个数据库集合 tests
module.exports = mongoose.model('User', userSchema);

3、数据的增删改查

3.1 查

// 1、拿到数据库的集合
const User = require('./collection/users.js'); // 第一个 {} 查询的条件
// 第二个 {} 显示的字段
// () => {} 回调函数显示查询的结果 ------ node中错误优先回调?????(作业)
// User.find({}, {}, (err, data) => {
// if (err) {
// console.log(err)
// } else {
// console.log(data)
// }
// }) User.find({}, {_id: 0, username: 1, age: 1}).exec((err, data) => {
if (err) throw err // 抛出异常,代码不再继续往下执行
console.log(data) })

3.2 增

// 找到用户表
const User = require('./collection/users'); // .js可以省略 // User.insert() xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// User.insertOne() xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// User.insertMany() √√√√√√√√√√√√√√√√√√√√√√√√√√√√
User.insertMany({
username: '美少女',
password: '971228',
age: 21,
sex: 1,
lesson: 3,
city: '安徽',
company: '千锋'
}, (err) => {
if (err) throw err;
console.log('插入成功')
})

3.3 删除数据

美少女

// 找到用户集合
const User = require('./collection/users'); // User.deleteOne({username: '美少女'}, (err) => {
// if (err) throw err;
// console.log('删除成功')
// }) User.deleteMany({username: /美少女/}, (err) => {
if (err) throw err;
console.log('删除成功')
})

3.4 改

const User = require('./collection/users');

// User.updateOne({username: '美少女1'}, { $set: {age: 25} }, (err) => {
// if (err) throw err;
// console.log('修改成功')
// }) User.updateMany({}, { $inc: {age: 1} }, (err) => {
if (err) throw err;
console.log('修改成功')
})

4、封装增删改查的操作

sql.js

const sql = {
insert () { },
delete () { },
update () { },
find () { }
} module.exports = sql

4.1 封装插入方法

insert (CollectionName, insertData) {
// 数据库的操作属于异步操作,后续的业务逻辑会交给执行的那个单位
// A 调用了B B包含异步操作,操作完毕 A继续执行业务逻辑
// 异步操作 --- 回调函数 / promise / generator + yeild / async + await
// User.insertMany(insertData, (err) => {
// if (err) throw err;
// console.log('插入成功')
// })
// promise的写法
// return new Promise((resolve, reject) => {
// })
return new Promise((resolve, reject) => {
CollectionName.insertMany(insertData, (err) => {
if (err) throw err;
resolve()
})
})
}

如何调用 sql_insert.js

const User = require('./collection/users');
const sql = require('./sql') sql.insert(User, {
username: '美少女3',
password: '123456',
age: 20,
lesson: 2,
sex: 0,
city: '上海',
company: '千锋'
}).then(() => {
console.log('插入数据成功')
})

4.2 封装删除模块

delete (CollectionName, deleteData, deleteType) {
// User.deleteOne(deleteData, (err) => {})
// User.deleteMany(deleteData, (err) => {}) // style.display = "none" <===> style['display'] = "none"
// style.animation = "test" 兼容性
// 对象后的属性不可以是变量,如果有变量,写成 对象[属性] 形式 deleteType = deleteType || 'deleteOne' // 默认为删除单条数据 return new Promise((resolve, reject) => {
CollectionName[deleteType](deleteData, (err) => {
if (err) throw err;
resolve()
})
})
}

测试删除模块 sql_delete.js

const User = require('./collection/users');
const sql = require('./sql'); // sql.delete(User, { username: '美少女3'}).then(() => {
// console.log('删除成功')
// }) sql.delete(User, { username: /美少女/}, 'deleteMany').then(() => {
console.log('删除成功')
})

4.3 封装修改模块

update (CollectionName, whereObj, updateObj, updateType) {
updateType = updateType || 'updateOne'
return new Promise((resolve, reject) => {
CollectionName[updateType](whereObj, updateObj, (err) => {
if (err) throw err;
resolve()
})
})
}

测试修改模块 sql_update.js

const User = require('./collection/users');
const sql = require('./sql'); // sql.update(User, { username: '操鑫' }, { $set: { age: 28 }}).then(() => {
// console.log('修改成功')
// }) sql.update(User, {}, { $inc: { age: 1 }}, 'updateMany').then(() => {
console.log('修改成功')
})

4.4 封装查询数据模块

find (CollectionName, whereObj, showObj) {
return new Promise((resolve, reject) => {
CollectionName.find(whereObj, showObj).exec((err, data) => {
if (err) throw err;
resolve(data)
})
})
}

测试查询模块 sql_find.js

const User = require('./collection/users');
const sql = require('./sql'); sql.find(User, {}, {_id:0, username: 1, age: 1, sex: 1}).then(data => {
console.log(data)
})

mongo操作数据库的更多相关文章

  1. Python Mongo操作

    # -*- coding: utf-8 -*- ''' Python Mongo操作Demo Done: ''' from pymongo import MongoClient conn = None ...

  2. python操作数据库之批量导入

    python操作数据库之批量导入 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的 ...

  3. SpringBoot使用WebFlux响应式编程操作数据库

    这一篇文章介绍SpringBoot使用WebFlux响应式编程操作MongoDb数据库. 前言 在之前一篇简单介绍了WebFlux响应式编程的操作,我们在来看一下下图,可以看到,在目前的Spring ...

  4. MongoDB操作数据库的几个命令(自己用)

    本文以配置百度的Clouda为源头:http://cloudajs.org/docs 继而安装node.js:http://nodejs.org/download/(直接安装,简单) 和MongoDB ...

  5. Java-jdbc操作数据库

    如果需要访问数据库,首先要加载数据库驱动,数据库驱动只需在第一次访问数据库时加载一次.然后在每次访问数据库时创建一个Connection实例,获取数据连接,这样就可以执行操作数据库的SQL语句.最后在 ...

  6. python高级之操作数据库

    python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...

  7. greenDao:操作数据库的开源框架

    greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...

  8. 总结一些关于操作数据库是sql语句还是存储过程问题

    总结一些关于操作数据库是sql语句还是存储过程问题 程序中,你跟数据的交互,需要向数据库拿数据.更改数据库的数据等,这些操作,本身不是程序完成的,而是程序发命令给数据库去做的,不管是通过sql语句方式 ...

  9. greendao操作数据库的使用方法

    第一步:把greendao-1.3.0-beta-1,greendao-generator-1.3.1两个jar包加载到工程的lib的文件夹中,一定要右键点击Add As Library后才能使用. ...

  10. pymysql 操作数据库

    一.简介 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,但目前pymysql支持python3.x而后者不支持3.x版本 其执行语句与sql源码相似 二.使用 ...

随机推荐

  1. win7下MongoDB安装配置

    之前看windows下安装MongoDB操作很是简单,今天在自己笔记本上安装一次,各种小问题.参照网上各大神帖子,再记录下个简单流程以便以后记得. 1.MongoDB官网上下载安装包 2.运行安装包, ...

  2. Guava布隆过滤器实战应用

    布隆过滤器 简介:本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 "某样东西一定 ...

  3. homework2软件方法论

    什么是软件工程方法论? 1.软件工程是一个方法论,就是我们在开始一个项目时,大体框架一定要有这么一个概念,而具体实施时,必须根据公司一些特点,优化项目开发的流程,这样才是有实效而方法论只是软件工程的结 ...

  4. json中有List集合时,转换List集合内元素的时间格式

    1 public class User implements Serializable { 2 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ...

  5. Markdown基础语法练习

    Markdown语法学习 标题 三级标题 四级标题 字体 hello,world! 两端各两个*****号 hello,world! 两端各一个*****号 hello,world! 两端各三个*** ...

  6. AD使用积累 - 板子上开孔的方法

    有时候画板子时需要需要在板子上开一些槽孔,可以参考如下两种方法: 第一种方法:封闭曲线转换为槽孔. 1.在机械层画一个封闭图形或者画一根线: 2.选中这个图形或线,选择工具 - 转换 - 以选中的元素 ...

  7. fgets()函数的详解以及使用时需要注意的一些细节-C语言基础

    这篇文章要探讨的是"fgets()函数的详解以及使用时需要注意的一些细节".涉及fgets()函数的应用和需要注意的问题.属于C语言基础篇(持续更新). fgets()(函数原型: ...

  8. 微信小程序开发-购物商城

    1.搭建首页tabbar结构 自定义组件实现搜索框 2.分类页面 加载分类页面数据 点击左侧菜单,右侧数据动态渲染 使用scroll-view组件 3.商品列表页面 点击商品 展示列表页面 加载商品数 ...

  9. CGAL5.0.2 CMake过程记录

    Zlib的INCLUDE_DIR 找到了,但是release_LIBRARY没有找到.不过没有影响generate. 打开build文件夹的CGAL.sln 文件,ALL_BUILD 生成,成功. 最 ...

  10. jxg项目Day1-配置

    1.搭建mysql与datagrip的连接(还未完成建表学习) 2.搭好项目框架:目前划分: maven我是直接复制的之前的两个项目的依赖,但是测试的时候遇到点问题:说数据库连不上,但是我明明已经配置 ...