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中的fiber(纤程)库详解
Mar 24 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
nodejs开发微信小程序实现密码加密
Jul 11 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
详解Nodejs内存治理
May 13 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 20 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
ubuntu系统下使用pm2设置nodejs开机自启动的方法
May 12 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
php中目录,文件操作详谈
2007/03/19 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
php 使用array函数实现分页
2015/02/13 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
js Dialog 实践分享
2012/10/22 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python 获取et和excel的版本号
2009/04/09 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Django框架模板的使用方法示例
2019/05/25 Python
django迁移数据库错误问题解决
2019/07/29 Python
Python连接字符串过程详解
2020/01/06 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
美国性感内衣店:Yandy
2018/06/12 全球购物
Java语言的优势
2015/01/10 面试题
毕业班联欢会主持词
2014/03/27 职场文书
开工典礼策划方案
2014/05/23 职场文书
少年犯观后感
2015/06/11 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript