Nodejs使用Mongodb存储与提供后端CRD服务详解


Posted in NodeJs onSeptember 04, 2018

前言

众所周知JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。

每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象。而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs、http等内置对象。

本文会把一个对象todo对象(有属性{id,name})存储到Mongodb,做查询删除的测试(Create Remove Delete = CRD)。这个测试包括使用Mongodb Shell,使用CallBack古典风格的访问代码,以及使用Await/Async的现代风格的代码。完成这个这个验证后,就可以掌握最初步的Mongodb了。

我使用的Nodejs是10.7 。操作系统环境为Mac OS X High Sierra。

准备环境

安装和运行Mongodb Daemon

brew install mongodb
mongodb

访问验证

首先执行Mongodb Shell:

mongo

输入命令,查询数据库清单:

> show dbs
local  0.000GB

创建一个数据库

use todos

(若database不存在,则会创建一个,此时若不做任何操作直接退出,则MongoDB会删除该数据库)

db.todos.insert({id:1,name:"reco"})
db.todos.insert({id:2,name:"rita"})

查询 :

db.todos.find()

{ "_id" : ObjectId("5b727c0846b6c71a98d3af52"), "id" : 1, "name" : "reco" }
{ "_id" : ObjectId("5b727c7046b6c71a98d3af53"), "id" : 2, "name" : "reta" }

删除记录:

db.todo.remove({id:1})

删除数据库

db.todo.drop()

使用nodejs方式访问Mongodb

使用nodejs执行类似Shell对对象的CRD,代码如下:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/todos";
MongoClient.connect(url, function(err, db) {
 if (err) throw err;
 console.log("Database created!");
 var dbo = db.db("todos");
 // var myobj = { id: 1, name: "reco" };
 // dbo.collection("todo").insertOne(myobj, function(err, res) {
 // if (err) throw err;
 // console.log("1 document inserted");
 // db.close();
 // });
 var myobj = [
 { id: 1, name: 'reco'},
 { id: 2, name: 'rita'},
 ];
 dbo.collection("todo").insertMany(myobj, function(err, res) {
 if (err) throw err;
 console.log("Number of documents inserted: " + res.insertedCount);
 dbo.collection("todo").find({}).toArray(function(err, result) {
 if (err) throw err;
 console.log(result);
 var myquery = { id: 1 };
 dbo.collection("todo").deleteMany(myquery, function(err, obj) {
 if (err) throw err;
 console.log("document deleted");
 db.close();
 });
 }); 
 });
})

代码非常简单,无需更多解释。此代码使用了mongodb模块,需要首先安装:

npm init -y
npm i mongodb --save

然后使用node index.js运行即可看到效果:

Database created!
Number of documents inserted: 2
[ { _id: 5b72ab9e3245f169ef5f43d2, id: 1, name: 'reco' },
 { _id: 5b72ab9e3245f169ef5f43d3, id: 2, name: 'rita' } ]
document deleted

利用高级异步特性

使用Await/Async特性,可以有效的减少代码中的回调地狱现象。同样的功能,可以使用这样的代码:

const MongoClient = require('mongodb').MongoClient;
const connectionString = 'mongodb://localhost:27017';
(async () => {
 const client = await MongoClient.connect(connectionString,
  { useNewUrlParser: true });
 const dbo = client.db('todos');
 try {
  var res = await dbo.collection('todo').insertMany(
  [{id:1,name:"reco"}, {id:2,name:"rita"}]);
  console.log("Number of documents inserted: " + res.insertedCount);
  var r = await dbo.collection("todo").find().toArray()
  console.log(r);
  var myquery = { id: 1 };
 var r = await dbo.collection("todo").deleteMany(myquery)
 console.log("document deleted");
 }
 finally {
  client.close();
 }
})().catch(err => console.error(err));

执行此代码,输出如下:

Number of documents inserted: 2
[ { _id: 5b72ae8a1c674a6ac1c5aa6e, id: 1, name: 'reco' },
  { _id: 5b72ae8a1c674a6ac1c5aa6f, id: 2, name: 'rita' } ]
document deleted

总结:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

NodeJs 相关文章推荐
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
浅析 NodeJs 的几种文件路径
Jun 07 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 #NodeJs
NodeJS如何实现同步的方法示例
Aug 24 #NodeJs
Nodejs中的JWT和Session的使用
Aug 21 #NodeJs
nodejs 如何手动实现服务器
Aug 20 #NodeJs
nodejs实现一个word文档解析器思路详解
Aug 14 #NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 #NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 #NodeJs
You might like
PHP5 的对象赋值机制介绍
2011/08/02 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
jQuery中width()方法用法实例
2014/12/24 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
javascript常用的方法分享
2015/07/01 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
Python中if elif else及缩进的使用简述
2018/05/31 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
经理秘书岗位职责
2013/11/14 职场文书
军训考核自我鉴定
2014/02/13 职场文书
小学运动会演讲稿
2014/08/25 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
八达岭长城导游词
2015/01/30 职场文书
简历中自我评价范文
2015/03/11 职场文书
行政二审代理词
2015/05/25 职场文书
会计做账心得体会
2016/01/22 职场文书
竞选稿之小学班干部
2019/10/31 职场文书