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实现Websocket的数据接收与发送
Nov 19 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 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调用三种数据库的方法(2)
2006/10/09 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
CI框架常用函数封装实例
2016/11/21 PHP
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
python字典值排序并取出前n个key值的方法
2018/10/17 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
keras topN显示,自编写代码案例
2020/07/03 Python
Numpy数组的广播机制的实现
2020/11/03 Python
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
校本教研工作方案
2014/01/14 职场文书
销售业务员岗位职责
2014/01/29 职场文书
优秀家长事迹材料
2014/05/17 职场文书
民事授权委托书范文
2014/08/02 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
晚会开场白和结束语
2015/05/29 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers