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制作爬虫全过程(续)
Dec 22 NodeJs
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 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
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
Tensorflow 多线程设置方式
2020/02/06 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
基于python检查矩阵计算结果
2020/05/21 Python
如何通过python计算圆周率PI
2020/11/11 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
大学生创业计划书的范文
2014/01/07 职场文书
人力资源职位说明书
2014/07/29 职场文书
运动会演讲稿50字
2014/08/25 职场文书
学校党支部承诺书
2015/04/30 职场文书
MySQL 字符集 character
2022/05/04 MySQL