mongodb以及mongoose的使用

课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html

项目github地址:https://github.com/hellozhangran/happy-egg-server

mongodb

mongodb是典型的非关系型数据库,关于它的背景介绍和优势劣势这里就不赘述,我们直接讲实操或者说最有可能用到的部分。

mongodb常用指令

  • mongod --config /opt/mongodb/mongod.conf 启动mongod服务。

    • 如果想在后台启动,需要修改mongod.conf,添加fork=true,然后再启动。
    • 想关掉后台运行的mongod服务,先查看所有后台运行的服务 lsof -i,找到mongod的pid号,kill yourpid
  • mongo 进入 mongo 环境
  • show dbs 查看所有的数据库
  • use test 进入test数据库
  • db.createCollection('user') 创建一个user集合
    • 这里简单介绍一下集合的概念,mongo 是非关系型数据库,不存在表的概念,与表相对应的是集合。当然集合不是表,与表相差很大,没有表的行列结构,可以简单的把集合当成一个 list,而 list 里面会放一个个对象。有没有发现这像极了json数据格式。
  • db.user.insert({name: 'zhangsan', age: 21, sex: 'male'}) 在集合中插入一条数据
  • db.user.find() 查看集合user中的所有数据
  • db.user.find().pretty() 以一个漂亮点的格式显示数据
  • db.user.find({name: 'zhangsan'}) find的第一个参数是where选择条件,显示符合name='zhangsan'的整条数据
  • db.user.find({name: 'zhangsan'}, {name: 1}) find的第一个参数是指定显示内容,显示符合条件的name,1是显示,0是不显示。

使用mongoose

mongoose是一个nodejs工具库,方便使用nodejs操作mongodb

1. 首先使用mongoose连接mongodb数据库

const mongoose = require('mongoose');

// 创建一个连接,并监听各种事件,在执行connect操作时,各事件会视具体情况而触发。
mongoose.connection
.on('error', function (err) {
// 数据库连接失败时触发
console.log('connect error: ', err);
})
.on('disconnected', function () {
// 数据库断开时触发,断开重连的逻辑可以放在这里。
})
.once('open', function () {
// 数据库连接成功时触发,express开启listen的逻辑可以放在这里。
}); // 启动mongod服务默认是运行在127.0.0.1上,所以下面路径是localhost
// test是数据库名,如果有则连接,如果无则创建
mongoose.connect('mongodb://localhost/test', {
useNewUrlParser: true,
useUnifiedTopology: true
});

2. Schema与Model

在mongoose中Schema、Model是非常重要的概念。Model对应mongodb中的集合 collection,而Schema对应集合的结构,也就是结合都有哪些字段、字段的类型、是否必填、是否有缺省值等。

const UserSchema = mongoose.Schema({
name: String,
age: Number,
sex: Boolean
}); // Schema的静态方法
UserSchema.statics.findUserByAge = function (age) {
// 用then来拿到结果,如findUserByAge(21).then((res) => {})。
// 也可以在find第二个参数传回调函数
return this.find({'age': age});
} // Schema的实例方法
UserSchema.methods.findUserByName = function(name) {
return this.model('User').find({ name: name });
}; // 创建一个Model,第三参数指定mongodb中collection的名字,如果不传则默认为变为复数(即Users)
const User = mongoose.model('User', UserSchema, 'user'); // 创建一条数据
// 1. 直接用User创建
User.create({name: 'zhangsan', age: 27, sex: true}, function(err, info) {
console.log(info);
}); // 2. 新创建一个对象再添加数据到数据库
// 再次说明下现在mongoose默认是支持promise方式的,可以使用then 或 回调函数的方式
var person = new User({name: 'lisi', age: 20, sex: false});
person.save().then(res => {
console.log(res);
}) // 调用Schema中定义的静态方法,可以通过User直接调
User.findUserByAge(21); // 调用Schema中定义的实例方法方法,先实例化再调
const user = new User();
user.findUserByName('zhangsan'); // 删除数据,删除符合条件的一条
User.deleteOne({name: 'lisi'}).then(); // 删除符合条件的所有数据
User.deleteMany({age: 20}).then(); // 注意:remove()方法已经被弃用了!

最后附上mongoose的api文档,其他的使用方法不一一列举:

http://www.mongoosejs.net/docs/api.html

TODO

上面讲的是目前项目中已经用到的,后续可能会继续拓展的:

  • docker与mongodb
  • mongodb复制集之自动容灾

【重学Node.js 第3篇】mongodb以及mongoose的使用的更多相关文章

  1. 【重学Node.js 第4篇】实现一个简易爬虫&启动定时任务

    实现一个简易爬虫&启动定时任务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://gith ...

  2. 【重学Node.js 第5篇】部署项目到腾讯云服务器

    课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://github.com/hellozhangran ...

  3. 打算写一个《重学Node.js》系列,希望大家多多支持

    先放上链接吧,项目已经开始2周了:https://github.com/hellozhangran/happy-egg-server 想法 现在是2019年11月24日,还有人要开始学习Node.js ...

  4. nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客

    GitHub: https://github.com/nswbmw/N-blog N-blog 使用 Express + MongoDB 搭建多人博客 开发环境 Node.js: 6.9.1 Mong ...

  5. 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

    本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...

  6. node.js操作数据库之MongoDB+mongoose篇

    前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...

  7. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

  8. Node.js Stream-基础篇

    Node.js Stream - 基础篇 邹斌 ·2016-07-08 11:51 背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分.这些部分的接口遵循一定的规范,通过某种方式相连,以共同 ...

  9. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

随机推荐

  1. CSS(4)---三大特性(继承性,层叠性,优先级)

    CSS(4)---三大特性(继承性,层叠性,优先级) CSS有三大特性分别是: 继承性,层叠性,优先级. 一.继承性 概念 给父元素设置一些属性,子元素也可以使用,这个我们就称之为继承性. 注意 1. ...

  2. php session获取不到的解决方法

    php session获取不到的解决方法 因为sesson数据是存在服务器端的硬盘一般临时空间不足 /tmp/ 1 这个需要清空下系统盘就可以了2 你可以在空间充足的地方mkdir 文件夹——你可以使 ...

  3. WordPress 去掉底部的自豪的采用WordPress

    WordPress 去掉底部的自豪的采用WordPress  

  4. 从最近面试聊聊我所感受的.net天花板

    #0 前言 入职新公司没多久,闲来无事在博客园闲逛,看到园友分享的面试经历,正好自己这段时间面试找工作,也挺多感想的,干脆趁这个机会总结整理一下.博主13年开始实习,14年毕业.到现在也工作五六年了. ...

  5. PHP 的面向对象 与 类

    面向对象 == OO 学习面向对象 == XXOO;[学习使我快乐!] <!--附一个demo类的实例化--> http://note.youdao.com/noteshare?id=38 ...

  6. Ubuntu Server16.04 安装Odoo11

    odoo11采用了python3实现的. 1.sudo adduser odoo   //新建一个用户odoo 2.给odoo 用户root 权限 visudo   //使用visudo 编辑 /et ...

  7. linux 6.5操作系统建立

    VM上redhat enterprise linux6 ---> 使用仅主机模式网络连接 开始安装: ——>是否检查镜像:skip ——>选择语言: 中文/英文 ——>存储设备 ...

  8. python进程池与线程池

    为什么会进行池化? 一切都是为了效率,每次开启进程都会分配一个属于这个进程独立的内存空间,开启进程过多会占用大量内存,系统调度也会很慢,我们不能无限的开启进程. 进程池原来大概如下图 假设有100个任 ...

  9. Win 使用终端创建mysql数据库及使用(5)

    删除你创建过的数据库newsql里面的所有表 这里必须安装了mysql,并且知道用户名密码IP地址.因为我用的window,所以只介绍Win使用cmd创建的方式 首先windown+R 出现窗口输入c ...

  10. 使用MongoDB的Spring Boot和MongoTemplate教程

    在本教程中,我们将构建一个Spring Boot应用程序,该应用程序演示如何使用MongoTemplate API访问MongoDB数据库中的数据. 对于MongoDB,我们将使用mLab,它提供了M ...