Node.js(二十五)

2023-11-13

Node.js 连接 MongoDB

MongoDB是一种文档导向数据库管理系统,由C++撰写而成。

本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。

如果你还没有 MongoDB 的基本知识,可以参考我们的教程:MongoDB 教程

安装驱动

本教程使用了淘宝定制的 cnpm 命令进行安装:

$ cnpm install mongodb

接下来我们来实现增删改查功能。


创建数据库

要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。 如果数据库不存在,MongoDB 将创建数据库并建立连接。

创建连接

var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/mydb " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; console . log ( " 数据库已创建! " ) ; db . close ( ) ; } ) ;

创建集合

我们可以使用 createCollection() 方法来创建集合:

创建集合

var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = ' mongodb://localhost:27017/mydb ' ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; console . log ( ' 数据库已创建 ' ) ; var dbase = db . db ( " mydb " ) ; dbase . createCollection ( ' runoob ' , function ( err , res ) { if ( err ) throw err ; console . log ( " 创建集合! " ) ; db . close ( ) ; } ) ; } ) ;

数据库操作( CURD )

与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。

插入数据

以下实例我们连接数据库 runoob 的 site 表,并插入两条数据:

插入数据

var MongoClient = require ( ' mongodb ' ) . MongoClient ; var DB_CONN_STR = ' mongodb://localhost:27017/runoob ' ; # 数据库为 runoob var insertData = function ( db , callback ) { // 连接到表 site var collection = db . collection ( ' site ' ) ; // 插入数据 var data = [ { " name " : " 菜鸟教程 " , " url " : " www.runoob.com " } , { " name " : " 菜鸟工具 " , " url " : " c.runoob.com " } ] ; collection . insert ( data , function ( err , result ) { if ( err ) { console . log ( ' Error: ' + err ) ; return ; } callback ( result ) ; } ) ; } MongoClient . connect ( DB_CONN_STR , function ( err , db ) { console . log ( " 连接成功! " ) ; insertData ( db , function ( result ) { console . log ( result ) ; db . close ( ) ; } ) ; } ) ;

执行以下命令输出就结果为:

$ node test.js
连接成功!
{ result: { ok: 1, n: 2 },
  ops: 
   [ { name: '菜鸟教程',
       url: 'www.runoob.com',
       _id: 58c25e13a08de70d3b9d4116 },
     { name: '菜鸟工具',
       url: 'c.runoob.com',
       _id: 58c25e13a08de70d3b9d4117 } ],
  insertedCount: 2,
  insertedIds: [ 58c25e13a08de70d3b9d4116, 58c25e13a08de70d3b9d4117 ] }

从输出结果来看,数据已插入成功。

我们也可以打开 MongoDB 的客户端查看数据,如:

> show dbs
admin   0.000GB
local   0.000GB
runoob  0.000GB          # 自动创建了 runoob 数据库
> show tables
site                     # 自动创建了 site 集合(数据表)
> db.site.find()         # 查看集合中的数据
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "www.runoob.com" }
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "c.runoob.com" }
> 

查询数据

以下实例检索 name 为 "菜鸟教程" 的实例:

查询数据

var MongoClient = require ( ' mongodb ' ) . MongoClient ; var DB_CONN_STR = ' mongodb://localhost:27017/runoob ' ; var selectData = function ( db , callback ) { // 连接到表 var collection = db . collection ( ' site ' ) ; // 查询数据 var whereStr = { " name " : ' 菜鸟教程 ' } ; collection . find ( whereStr ) . toArray ( function ( err , result ) { if ( err ) { console . log ( ' Error: ' + err ) ; return ; } callback ( result ) ; } ) ; } MongoClient . connect ( DB_CONN_STR , function ( err , db ) { console . log ( " 连接成功! " ) ; selectData ( db , function ( result ) { console . log ( result ) ; db . close ( ) ; } ) ; } ) ;

执行以下命令输出就结果为:

连接成功!
[ { _id: 58c25f300cd56e0d7ddfc0c8,
    name: '菜鸟教程',
    url: 'www.runoob.com' } ]

更新数据

我们也可以对数据库的数据进行修改,以下实例将 name 为 "菜鸟教程" 的 url 改为 https://www.runoob.com:

更新数据

var MongoClient = require ( ' mongodb ' ) . MongoClient ; var DB_CONN_STR = ' mongodb://localhost:27017/runoob ' ; var updateData = function ( db , callback ) { // 连接到表 var collection = db . collection ( ' site ' ) ; // 更新数据 var whereStr = { " name " : ' 菜鸟教程 ' } ; var updateStr = { $ set : { " url " : " https://www.runoob.com " } } ; collection . update ( whereStr , updateStr , function ( err , result ) { if ( err ) { console . log ( ' Error: ' + err ) ; return ; } callback ( result ) ; } ) ; } MongoClient . connect ( DB_CONN_STR , function ( err , db ) { console . log ( " 连接成功! " ) ; updateData ( db , function ( result ) { console . log ( result ) ; db . close ( ) ; } ) ; } ) ;

执行成功后,进入 mongo 管理工具查看数据已修改:

> db.site.find()
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "https://www.runoob.com" }
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "c.runoob.com" }

删除数据

以下实例将 name 为 "菜鸟工具" 的数据删除 :

删除数据

var MongoClient = require ( ' mongodb ' ) . MongoClient ; var DB_CONN_STR = ' mongodb://localhost:27017/runoob ' ; var delData = function ( db , callback ) { // 连接到表 var collection = db . collection ( ' site ' ) ; // 删除数据 var whereStr = { " name " : ' 菜鸟工具 ' } ; collection . remove ( whereStr , function ( err , result ) { if ( err ) { console . log ( ' Error: ' + err ) ; return ; } callback ( result ) ; } ) ; } MongoClient . connect ( DB_CONN_STR , function ( err , db ) { console . log ( " 连接成功! " ) ; delData ( db , function ( result ) { console . log ( result ) ; db . close ( ) ; } ) ; } ) ;

执行成功后,进入 mongo 管理工具查看数据已删除:

> db.site.find()
{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "https://www.runoob.com" }
> 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js(二十五) 的相关文章

  • Linux下ntpdate时间同步

    原文地址 http gaoxingf blog 51cto com 612518 121959 作者 高兴F Linux下ntpdate时间同步 Ntp服务器安装配置 RedHat服务器可以下载rpm安装包 然后执行 rpm ivh ntp
  • Linux安装MySQL

    Linux安装MySQL 链接 MySQL官网9 7 18的下载 查看是否已经安装了mariadb 检查linux是否安装了mariadb数据库 mariadb数据库是mysql的分支 是免费开源的 mariadb和msyql会有冲突 首先
  • vue中用echart写饼状图

    用echart饼状图实现男女比例 效果图如下 实现代码如下
  • 静态代码扫描工具汇总

    一 概述 在软件开发过程中 开发团队往往要花费大量的时间和精力发现并修改代码缺陷 传统的代码评审 同事复审 通过人工方式来检查缺陷仍然是一件耗时耗力的事情 而静态代码扫描工具能够在代码构建过程中帮助开发人员快速 有效的定位代码缺陷并及时纠正
  • Qt 设置窗口背景图片的几种方法

    1 在paintEvent事件中绘制图片 void Widget paintEvent QPaintEvent ev QPainter painter this painter drawPixmap rect QPixmap bg jpg
  • k8s集群中部署微服务项目前端代理服务 Nginx

    k8s集群中部署微服务项目前端代理服务 Nginx 一 微服务项目静态资源准备 mkdir sangomall proxy cd sangomall proxy root k8s master01 sangomall proxy ls co
  • 记录开发遇到的问题

    这里写目录标题 一 React 1 ref和wrappedComponentRef使用区别 https blog csdn net weixin 38009285 article details 119420763 2 umi中其他页面跳转
  • ctfshow web 练习记录(1,2)

    web1 查看源代码 base64解码 web2 sql注入 使用万能公式username 1 or 1 1 passwd 123 有回显 再使用order by 查询列数 username 1 or 1 1 order by 1 到4没有
  • 国内访问github速度过慢的问题解决

    1 在浏览器上输入网址 http tool chinaz com dns 2 查询http github com 3 找到TTL值最低的响应IP 比如IP20 32 253 113的TTL值最低你就选这个IP 4 打开我的电脑 进入到C W
  • 粒子群算法组卷_CVRP问题求解(一)整数编码的粒子群算法

    CVRP问题求解 一 整数编码的粒子群算法 粒子群算法概述 粒子群算法 Particle Swarm Optimization 是由鸟群捕食得到启发的一种算法 在鸟类觅食过程中 每只鸟都会利用自身经验和群体信息来寻找食物 在觅食过程中 每只
  • 跳槽季到了,Linux运维跳槽40道面试精华题

    1 什么是运维 什么是游戏运维 1 运维是指大型组织已经建立好的网络软硬件的维护 就是要保证业务的上线与运作的正常 在他运转的过程中 对他进行维护 他集合了网络 系统 数据库 开发 安全 监控于一身的技术 运维又包括很多种 有DBA运维 网
  • C++寻找数组中的最大值

    include
  • OpenCV——高斯滤波

    目录 一 高斯滤波 二 C 代码 三 python代码 四 结果展示 1 原始图像 2 5x5卷积 3 9x9卷积 一 高斯滤波 高斯滤波是一种线性平滑滤波 适用于消除高斯噪声 广泛应用于图像处理的减噪过程 1 通俗的讲 高斯滤波就是对整幅
  • PC端页面适应不同的分辨率的方法

    上周完成一个PC端的项目 对于我这样的小白来说 这个项目里面最大的问题就是 如何做到让HTML页面适应电脑的不同分辨率 通过师傅的指导和自己查阅资料 最终成功适配不同的分辨率 完成了这个项目 现在回头再来看这个项目 突然发现适配不同的分辨率
  • js弹出窗口总结6种弹窗方法

    关闭 父窗口弹出对话框 子窗口直接关闭 this Response Write 关闭 父窗口和子窗口都不弹出对话框 直接关闭 this Response Write 弹出窗口刷新当前页面width 200 height 200菜单 菜单栏
  • 【图像处理】OpenCV截图小工具

    还存在一些小Bug 需要改进 include
  • 查询表结构信息sql

    select DQMS 库名 A Table Name 表名 C comments 表中文名 A column name 字段名 B comments 备注 A data type 数据类型 A data length 长度 A data
  • 基于SpringBoot左岸小区车位管理系统的设计与实现

    随着信息化时代的到来 管理系统都趋向于智能化 系统化 小区车位管理系统也不例外 但目前不少小区车位的管理仍都使用人工管理 小区规模越来越大 入住率越高 小区车辆信息量也越来越庞大 人工管理显然已无法应对时代的变化 而小区车位管理系统能很好地
  • STM32裸机串口接收方案

    点击下面 进入总目录索引 STM32系列精品Demo集 总目录 一 UART接收方案汇总 补充说明 上述接收方案中有协议帧 本协议帧指的是有帧头帧尾这种协议 不包含类似AT指令这种协议方案 二 UART丢包问题分析 2 1 裸跑机制 裸跑时
  • SpringBoot配置日志每天输出到指定文件

    在使用springboot搭建项目时 它内部引入了logback作为日志框架 默认只有info级别的控制台日志输出 在线上环境都是输出到文件的 并且每日一个文件夹 自动更换文件 文件内容超出一定大小 自动切分 并且以递增的序号排列 不同级别

随机推荐

  • 前端 JavaScript js PDF转img PDF转base64 PDF转图片

    需求是将前端加载的PDF转化到base64上传服务器
  • 【解决】当你不小心将桌面文件位置直接位移到D盘,且桌面上出现D盘所有目录的解决办法!!!

    首先能够出现这个问题的话 必定是你想要将桌面文件位置放在D盘 而不是系统默认的C盘 这样你在桌面显示的东西都可以是占用D盘的内存而不是C盘的内存 在这其中有些人可能出现失误出现了如题目所示的麻烦 我们直接进入主题 首先 在开始菜单搜索 re
  • 【内网穿透】远程访问后端编写中的接口,可用于前后端Swagger远程调试,和https微信开发测试

    之前在家和项目组的同学分开了 无法在同一个路由下通过访问局域网下的ip进行接口对接 只有借助第三方工具 开进行远程访问 NATAPP 我们可以在这个网址购买隧道 与自己电脑上配置后 便可以远程发问idea项目运行的的链接 其次由于连接支持h
  • 海康SDK:C3690 应该为字符串文本,但找到的是用户定义的字符串文本; C4430 缺少类型说明符 - 假定为 int

    海康SDK C 严重性代码说明项目文件行禁止显示状态错误 C3690 应该为字符串文本 但找到的是用户定义的字符串文本 Alarm严重性代码 说明 项目 文件行禁止显示状态错误 C4430 缺少类型说明符 假定为 int 注意 C 不支持默
  • JS面试——宏任务与微任务

    JavaScript的宏任务与微任务 1 问题的由来 2 JavaScript的宏任务与微任务 2 1promise的使用方法 2 2async与await的使用方法 3 面试题实战分析 程序执行顺序 参考文献 1 问题的由来 我相信 你也
  • GAMES101笔记_Lec07~09_着色 Shading

    0 我们已经学了什么 What We ve Covered So Far 空间中定义了一个摄像机 通过某些变换使模型摆好姿势 Model 通过观测变换让摄像机放在原点 得到标准的 1 1
  • EL&&JSTL

    一 JSP技术 1 jsp脚本和注释 jsp脚本 1 内部的java代码翻译到service方法的内部 2 会被翻译成servlet的成员的内容 jsp注释 不同的注释可见范围是不同 1 Html注释 可见范围 jsp源码 翻译后的serv
  • 【C++入门】C++和C语言比较:新增的和有变化的关键字

    1 新增bool关键字 1 1 C语言的bool类型 define true 1 define false 0 C语言中的bool类型 typedef int bool 1 bool类型也叫逻辑类型 只存在两个值 true和false tr
  • Java中的反射(一)

    一 反射概念 反射 简单来说就是分析类信息的能力 类信息包括属性 方法 构造器等 Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息 从而操作类或对象的属性和方法 本质是JVM得到类对象之后 再通过类对象进行反编译 从而获取对
  • discuz应用中心,discuz应用中心问题解决

    discuz应用中心 在很久很久以前 站长们想装个插件 装个模板很费力气的 首先是要去找 找到后不知道怎么装 装上后不满意卸载也很麻烦 不过 以后这种情况就会大大的改善了 因为discuz应用中心 可以让站长们快速找到想要的插件 安装插件变
  • 【深度学习目标检测系列 - 01】目标检测是什么

    目标检测 Object Detection 一直以来都是深度学习领域的热门话题 这个系列的文章会对其进行详细的梳理 1 目标检测是什么 图像分类任务回答的是 图像中的物体是什么 而目标检测任务回答的是 图像中的物体是什么 它处于图像的什么位
  • 【S5P6818】最小文件系统制作

    00 目录 文章目录 00 目录 01 BusyBox概述 02 下载BusyBox 03 编译BusyBox 04 最小文件系统制作 05 设置开发板参数 06 讨论 07 附录 01 BusyBox概述 BusyBox 是一个集成了三百
  • 2019年9月25日星期三(STM32 ucos3)

    一 UCOS 1 概念 uc OS III Micro C OS Thee 微型C语言编写的操作系统第三版 是一个可升级 可固化 多任务基于优先级的可抢占式实时内核 ucos的任务个数不限制 实现了操作系统所需求的大部分功能 资源管理 同步
  • C++ 左值引用 和 右值引用

    C 左值引用 和 右值引用 左值 右值是什么 左值引用 右值引用 参考 总结 左值 右值是什么 表达式的分类图 mermaid svg eHEtnhMOW8UctFkd label font family trebuchet ms verd
  • StringBuffer内容清空效率比较

    在开发程序的时候 经常使用StringBuffer来进行字符串的拼接 如果在循环中来反复的做字符串拼接时 会清空Stringbuffer中的内容 然后再拼接新的字符串信息 例如 StringBuffer sb new StringBuffe
  • 刺激战场服务器无响应ios,绝地求生刺激战场IOS系统更新后玩不了 绝地求生刺激战场苹果手机更新后进不去...

    导 读 相信有不少的绝地求生刺激战场的IOS玩家们在本次的IOS系统更新后玩不了 这可让许多的苹果党们大为的苦恼 因此下面就来为各位针对绝地求生刺激战场苹果手机更新后进不去的问题做一个解决方案 希望能够帮到各 相信有不少的绝地求生刺激战场的
  • 基于VGG-Face的年龄估计(论文总结与代码解释)

    目录 1 本文改进 2 模型结构 3 训练模型 4 预测数据 5 实验结果 6 模型比较 7 结论分析 8 数据集分析 9 完整代码 1 本文改进 本文主要是使用VGG Face模型 卷积层不变 改变全连接层 在Adience数据库上进行年
  • 项目规模估计方法介绍

    项目成本估算是对完成项目工作所需要的 费用进行估计和计划 是 项目计划中的一个重要组成部分 要实行 成本控制 必须先估算 费用 费用估算过程实际上是确定完成项目全部工作活动所需要的资源的一个费用估计值 这是一个近似值 既可以用货币单位表示
  • http1 & http2 发展与特性

    Http http协议已经被广泛应用在web应用中 常用于一下几种场景 聊天 全双工 客户端和服务器实时通信 推送 服务器主动向客户端通信 应答 传统模式 客户端发起请求 服务器响应 长连接 TCP Http协议本身就是基于请求 应答模式的
  • Node.js(二十五)

    Node js 连接 MongoDB MongoDB是一种文档导向数据库管理系统 由C 撰写而成 本章节我们将为大家介绍如何使用 Node js 来连接 MongoDB 并对数据库进行操作 如果你还没有 MongoDB 的基本知识 可以参考