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写的一个简单项目打包工具
May 11 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 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中MVC结构学习
2006/10/09 PHP
PHP新手上路(三)
2006/10/09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
js玩一玩WSH吧
2007/02/23 Javascript
javascript 贪吃蛇实现代码
2008/11/22 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
公务员个人自我评价分享
2013/11/06 职场文书
项目专员岗位职责
2013/12/04 职场文书
军训 自我鉴定
2014/02/03 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技