介绍

无论是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. 使用第三方包mongoose来操作MongoDB数据库,解决报错:MongooseError

    使用第三方包mongoose来操作MongoDB数据库 官方网站 配置文件 异常 异常描述: MongooseError: Operation cats.insertOne() buffering t ...

  2. mongoose操作mongodb

    http://mongoosejs.com/docs/api.html#index-js mongoose是nodejs环境下操作mongodb的模块封装,使用mongoose之后,实际上只需要在mo ...

  3. Nodejs 操作 MongoDb 数据库

    一.在 Nodejs 中使用 Mongodb 在前面的博文我们给大家讲了如何使用命令操作 Mongodb,这篇博文开始我们给大家讲解一 下如何使用 Nodejs 来操作 Mongodb 数据库 Nod ...

  4. 使用mongoose 在 Node中操作MongoDB数据库

    MongoDB 关系型和非关系型数据库 关系型数据库(表就是关系,或者说表与表之间存在关系). 所有的关系型数据库都需要通过sql语言来操作 所有的关系型数据库在操作之前都需要设计表结构 而且数据表还 ...

  5. node用mongodb还是mysql,Node 操作 mongoDB 数据库和 mySQL数据库

    下载安装 MongoDB image.png 直接点击下载就行了 image.png 安装 mongodb 一直点击下一步,知道这一步 image.png 选中自己选择想安装的目录路径(选择安装的目录 ...

  6. nodejs操作mongodb数据库(mongoose)

    准备 在上一篇的基础上,通过npm安装mongoose. 关于mongoose Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB n ...

  7. MONGOOSE – 让NODE.JS高效操作MONGODB(转载)

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  8. Node.js使用mongoose操作mongodb

    软件配置: 1.node v8.9.3 2. npm 5.5.1 3. mongoose及MongoDB版本见下package.json // package.json {   "name& ...

  9. Mongoose使用操作

    一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口. 连接数据库 // mongoose 链接 var mongoose = requ ...

最新文章

  1. 面霸篇:高频 Java 基础问题(核心卷一)
  2. leetcode : Reverse Linked List II [two pointers]
  3. shutil python_shutil模块
  4. 大数据数据量估算_如何估算数据科学项目的数据收集成本
  5. python正则表达式怎么表示零个或多个字符_VBA中正则表达式之分组
  6. Outlook 2003解除附件下载限制
  7. linux c select函数返回值,linux c中select使用技巧
  8. Android音视频系列(七):PCM音频单声道与双声道的相互转换
  9. 开始使用Mac OS X——写给Mac新人
  10. jQuery-对联广告
  11. 家里的垃圾移动光猫和tp路由器设置
  12. 回收站的东西怎么恢复?mac电脑回收站清空还能恢复吗?
  13. [转] 能不吃最好别吃:一个食品专业本科生的自白
  14. git 解决冲突后提交 fatal: cannot do a partial commit during a merge.
  15. 继明哥的否定之后,java泰又出新作!明哥接码!
  16. 光纤收发器的原理及应用_光纤收发器知识讲解(一)
  17. kali安装水泽,进行简单换源
  18. R极简教程-10:R语言绘图基础
  19. 【SLAM学习】ORB-SLAM2-大体框架(OpenVSLAM)
  20. python 爬虫(cookie)

热门文章

  1. CSS3 Media Queries 详细介绍与使用方法,Responsive Web Design 必备技术, 响应式设计
  2. Linux查看与修改时区、时间的命令
  3. 怎样在 Ubuntu 13.04 Raring Ringtail , 12.10, 12.04 中安装和设置 Samba 实现网上邻居共享...
  4. Objective-C 2.0 with Cocoa Foundation --- 2,从Hello,World!开始
  5. golang安装grpc,timeout问题
  6. JAVA——实现json bean实体类的传参校验模板及注解详解
  7. Java—List集合详解
  8. django-静态文件设置
  9. 记AELF区块链网络的一次内存持续增长问题排查
  10. 本地上传图片无法预览