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服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
nodejs处理tcp连接的核心流程
Feb 26 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
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
python 迭代器和iter()函数详解及实例
2017/03/21 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
简单了解python模块概念
2018/01/11 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
加拿大留学自荐信
2014/01/28 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
酒店员工手册范本
2015/05/14 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS