介绍

无论是mysql还是mongodb,传统的与数据库交互的方式都是按照他们提供的API来写代码。它们提供的API往往不是很容易理解,而且难以记忆,如果传错了参数,写错一个符号都要查文档。

ORM(对象关系映射,Object Relational Mapping)框架,允许我们面向对象操作,不需要记忆任何的数据库API,只需要操作对象即可,由框架底层去调用数据库API,这样就大大提高了程序员的开发效率。

不过既然多了一层封装,肯定要损失一点点的性能,可以忽略不计。

在NodeJS中,操作mongodb最好的ORM框架就是mongoose

安装mongoose

npm install mongoose --save

如果你本机没有安装nodejs驱动,会自动安装nodejs驱动,因为mongoose依赖nodejs驱动。

文档参考:mongoose官方文档http://mongoosejs.com/docs/index.html

连接数据库

'use strict'
let User = require('./model/user');
let mongoose = require('mongoose');
mongoose.connect("mongodb://127.0.0.1/test");

let db = mongoose.connection;
// 监听错误的事件
db.on('error', err => {
    console.log(err);
});

db.once('open', () => {
    console.log('mongodb connect successfully!');
    highOrderQuery()
});

模型定义

mongoose使用schema来描述数据的格式、字段、规则,有了schema之后可以生成model来操作数据。

一般我们新建一个model目录来存放这些模型文件,比如这里我们新建一个model/user.js

'use strict'
let mongoose = require('mongoose');
let schema = mongoose.Schema({
    name: String,
    age: Number,
    address: String,
    fav: [String]
}, {
    versionKey: false
}
);

module.exports = mongoose.model("users", schema);

增删改查

直接查看文档中Model相关API。

async function testCRUD() {
    //增
    let arr = [
        {
            name: "李连杰", age: 50, address: "北京", fav: ["功夫", "演电影", "旅游"]
        },
        {
            name: "吴京", age: 48, address: "北京", fav: ["功夫", "演电视剧", "运动"]
        },
    ];
    let res = await User.create(arr);
    console.log(res);

    //查
    let res = await User.findOne({address: "北京"}); //查询出符合条件的第一个文档
    console.log(res);
    let res = await User.find({address: "北京"}); // 查询出符合条件的所有文档
    console.log(res);

    //改
    let res = await User.updateOne({_id: "5b4065e548651d0b7035843d"}, {age: 11, address: "深圳"});
    console.log(res);

    //删
    let res = await User.deleteOne({_id: "5b4065e548651d0b7035843d"});
    console.log(res);
}

高级查询

所有条件操作符:https://docs.mongodb.com/manual/reference/operator/query/

async function highOrderQuery() {
    //条件查询
    let res = await User.find({age: {$gt: 15}});

    //数组查询
    let res = await User.find({
        fav: "玩游戏"
    });

    //分页查询
    // sort({age:1}) : 1(默认)是从小到大,-1是从大到小
    // sort("-age") :可以直接写`-`,表示从大到小
    // select("")只选择某个或某几个字段;select("-fav")不选某个字段
    let res = await User.find().skip(0).limit(2).sort("-age").select("-fav"); 

    console.log(res);
}

参考

  • 黑马程序员 120天全栈区块链开发 开源教程

    https://github.com/itheima1/BlockChain

一番雾语:操作mongodb最好的NodeJS框架。



免费知识星球:一番码客-积累交流

微信公众号:一番码客

微信:Efon-fighting

网站:http://www.efonmark.com

mongoose-面向对象操作mongodb的Nodejs框架的更多相关文章

  1. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  2. mongoose之操作mongoDB数据库

    mongoose是node.js操作mongoDB数据库的一种工具,借助于mongoose,我们可以便捷的完成一些数据库的基本操作,基本使用如下: 1.安装 npm install mongoose ...

  3. Node.js使用Mongoose包操作MongoDB数据库

    1. 安装Mongoose npm install mongoose 2. 使用 2.1 创建连接 var mongoose = require('mongoose'); mongoose.conne ...

  4. MongoDB_简介_安装_基本使用_js_mongoose 操作 MongoDB 编程

    数据库 按照数据结构来组织.存储和管理数据的仓库 程序运行时,数据存储于内存中,一旦程序结束或者断电,就会数据丢失 为了将有些数据持久化存储到硬盘中,并确保可操作性和安全性,就需要数据库 分类: 关系 ...

  5. nodejs 使用mongoose 操作mongodb

    nodejs操作mongodb可以使用mongoose: Mongoose is a MongoDB object modeling tool designed to work in an async ...

  6. nodejs+mongoose操作mongodb副本集实例

    继上一篇设置mongodb副本集之后,开始使用nodejs访问mongodb副本集: 1:创建项目     express 项目名称 2:npm install mongoose    安装mongo ...

  7. mongodb学习(3)--- NodeJs使用mongoose操作mongodb

    转载: https://cnodejs.org/topic/50c145ed637ffa4155c7eaee 首先对于以下错误说明(有写 db.close): Error: db object alr ...

  8. Nodejs学习笔记(二)--- 操作MongoDB数据库

    最近看了一些关于mongodb的文章,然后就想知道nodeJS是怎么连接的所以我就尝试去了解了一波(这个菜鸟驿站这个网站还不错,虽然知识文档不是最新的,但是还是蛮好的: 顺便官网地址是这个哦:http ...

  9. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

随机推荐

  1. 基于 maven 的ssm 框架搭建

    1.新建一个 maven 工程, war 包 2.引入 pom 文件(springmvc+spring+mybatis) 3.引入配置文件 4.引入页面,编写 contorller 层测试 5.编写查 ...

  2. python中使用自定义类实例作为字典的key

    python中dict类型的key值要求是不可变类型,通常来说,我们一般采用int或者str类型来作为字典的key,但是在某些场景中,会造成一定的麻烦. 如我们有一个处理http Request的规则 ...

  3. 如何使用css伪类,实现div左上角出现封面等提示信息

     HTML <div class="ui-cover-tip”><div> CSS .ui-cover-tip{ position: relative; width: ...

  4. python调用存储过程失败返回1787错误

    (1787, 'When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP T ...

  5. 整理汇总系统中空值的使用方法,后台+jsp

    一.后台: 1. entity.getStringValue().isEmpty()://字符串自带方法,未发现非空方法实现原理:判断值的长度 public boolean isEmpty() { r ...

  6. perf4j @Profiled常用写法

    以下内容大部分摘抄自网络上信息. 1.默认写法 @Profiled 日志语句形如: 2009-09-07 14:37:23,734 [main] INFO org.perf4j.TimingLogge ...

  7. A 小石的签到题

    题目链接:https://ac.nowcoder.com/acm/contest/949/A 思路: 这题明确的说了是个签到题,但是一直怀疑不是签到题,是唬我的,结果仔细想了想真是这么回事. 每个人必 ...

  8. 关于js中的比较时遇到的坑

    关于JavaScript中比较遇到的坑 当你的要比较数字的大小但是你的数字确是字符串时,就会出错比如说: console.log('5' > '6') // fasle consloe.log( ...

  9. maven工程项目依赖爆红,手动导入依然缺少依赖

    1.新建一个工程 2.把依赖添加到新建工程的pom文件 神奇的事情发生了,依赖自动补全!!! 3.点击install 安装一下可能有些依赖会有其他依赖 建议:不要在自己原来的工程上浪费时间,新建工程. ...

  10. 吴裕雄--天生自然 R语言开发学习:时间序列

    #-----------------------------------------# # R in Action (2nd ed): Chapter 15 # # Time series # # r ...