加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 系统 > 正文

Node.js连接MongoDB的细致操作是什么样的呢

发布时间:2023-09-14 15:22:02 所属栏目:系统 来源:
导读:这篇文章主要介绍“Node.js连接MongoDB的详细操作是什么样的呢”,有一些人在Node.js连接MongoDB的详细操作是什么样的呢的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助
这篇文章主要介绍“Node.js连接MongoDB的详细操作是什么样的呢”,有一些人在Node.js连接MongoDB的详细操作是什么样的呢的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。
 
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/runoob " ; 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/runoob ' ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; console . log ( ' 数据库已创建 ' ) ; var dbase = db . db ( " runoob " ) ; dbase . createCollection ( ' site ' , function ( err , res ) { if ( err ) throw err ; console . log ( " 创建集合! " ) ; db . close ( ) ; } ) ; } ) ;
 
数据库操作( CURD )
 
与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。
 
插入数据
 
以下实例我们连接数据库 runoob 的 site 表,并插入一条数据条数据,使用 insertOne():
 
插入一条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var myobj = { name : " 菜鸟教程 " , url : " www.runoob " } ; dbo . collection ( " site " ) . insertOne ( myobj , function ( err , res ) { if ( err ) throw err ; console . log ( " 文档插入成功 " ) ; db . close ( ) ; } ) ; } ) ;
 
执行以下命令输出就结果为:
 
$ node test.js
 
文档插入成功
 
从输出结果来看,数据已插入成功。
 
我们也可以打开 MongoDB 的客户端查看数据,如:
 
> show dbs
 
runoob  0.000GB          # 自动创建了 runoob 数据库
 
> show tables
 
site                     # 自动创建了 site 集合(数据表)
 
> db.site.find()
 
{ "_id" : ObjectId("5a794e36763eb821b24db854"), "name" : "菜鸟教程", "url" : "www.runoob" }
 
>
 
如果要插入多条数据可以使用 insertMany():
 
插入多条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var myobj = [ { name : ' 菜鸟工具 ' , url : ' https://c.runoob.com ' , type : ' cn ' } , { name : ' Google ' , url : ' https://www.google.com ' , type : ' en ' } , { name : ' Facebook ' , url : ' https://www.google.com ' , type : ' en ' } ] ; dbo . collection ( " site " ) . insertMany ( myobj , function ( err , res ) { if ( err ) throw err ; console . log ( " 插入的文档数量为: " + res . insertedCount ) ; db . close ( ) ; } ) ; } ) ;
 
res.insertedCount 为插入的条数。
 
查询数据
 
可以使用 find() 来查找数据, find() 可以返回匹配条件的所有数据。 如果未指定条件,find() 返回集合中的所有数据。
 
find()
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; dbo . collection ( " site " ) . find ( { } ) . toArray ( function ( err , result ) { // 返回集合中所有数据 if ( err ) throw err ; console . log ( result ) ; db . close ( ) ; } ) ; } ) ;
 
以下实例检索 name 为 "菜鸟教程" 的实例:
 
查询指定条件的数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var whereStr = { " name " : ' 菜鸟教程 ' } ; // 查询条件 dbo . collection ( " site " ) . find ( whereStr ) . toArray ( function ( err , result ) { if ( err ) throw err ; console . log ( result ) ; db . close ( ) ; } ) ; } ) ;
 
执行以下命令输出就结果为:
 
[ { _id: 5a794e36763eb821b24db854,
 
    name: '菜鸟教程',
 
    url: 'www.runoob' } ]
 
更新数据
 
我们也可以对数据库的数据进行修改,以下实例将 name 为 "菜鸟教程" 的 url 改为 https://www.runoob.com:
 
更新一条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var whereStr = { " name " : ' 菜鸟教程 ' } ; // 查询条件 var updateStr = { $ set : { " url " : " https://www.runoob.com " } } ; dbo . collection ( " site " ) . updateOne ( whereStr , updateStr , function ( err , res ) { if ( err ) throw err ; console . log ( " 文档更新成功 " ) ; db . close ( ) ; } ) ; } ) ;
 
执行成功后,进入 mongo 管理工具查看数据已修改:
 
> db.site.find().pretty()
 
{
 
    "_id" : ObjectId("5a794e36763eb821b24db854"),
 
    "name" : "菜鸟教程",
 
    "url" : "https://www.runoob.com"     // 已修改为 https
 
}
 
如果要更新所有符合条的文档数据可以使用 updateMany():
 
更新多条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var whereStr = { " type " : ' en ' } ; // 查询条件 var updateStr = { $ set : { " url " : " https://www.runoob.com " } } ; dbo . collection ( " site " ) . updateMany ( whereStr , updateStr , function ( err , res ) { if ( err ) throw err ; console . log ( res . result . nModified + " 条文档被更新 " ) ; db . close ( ) ; } ) ; } ) ;
 
result.nModified 为更新的条数。
 
删除数据
 
以下实例将 name 为 "菜鸟教程" 的数据删除 :
 
删除一条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var whereStr = { " name " : ' 菜鸟教程 ' } ; // 查询条件 dbo . collection ( " site " ) . deleteOne ( whereStr , function ( err , obj ) { if ( err ) throw err ; console . log ( " 文档删除成功 " ) ; db . close ( ) ; } ) ; } ) ;
 
执行成功后,进入 mongo 管理工具查看数据已删除:
 
> db.site.find()
 
>
 
如果要删除多条语句可以使用 deleteMany() 方法
 
以下实例将 type 为 en 的所有数据删除 :
 
删除多条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var whereStr = { type : " en " } ; // 查询条件 dbo . collection ( " site " ) . deleteMany ( whereStr , function ( err , obj ) { if ( err ) throw err ; console . log ( obj . result . n + " 条文档被删除 " ) ; db . close ( ) ; } ) ; } ) ;
 
obj.result.n 删除的条数。
 
排序
 
排序 使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。
 
例如:
 
{ type: 1 }  // 按 type 字段升序
 
{ type: -1 } // 按 type 字段降序
 
按 type 升序排列:
 
排序
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; var mysort = { type : 1 } ; dbo . collection ( " site " ) . find ( ) . sort ( mysort ) . toArray ( function ( err , result ) { if ( err ) throw err ; console . log ( result ) ; db . close ( ) ; } ) ; } ) ;
 
查询分页
 
如果要设置指定的返回条数可以使用 limit() 方法,该方法只接受一个参数,指定了返回的条数。
 
limit():读取两条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; dbo . collection ( " site " ) . find ( ) . limit ( 2 ) . toArray ( function ( err , result ) { if ( err ) throw err ; console . log ( result ) ; db . close ( ) ; } ) ; } ) ;
 
如果要指定跳过的条数,可以使用 skip() 方法。
 
skip(): 跳过前面两条数据,读取两条数据
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; dbo . collection ( " site " ) . find ( ) . skip ( 2 ) . limit ( 2 ) . toArray ( function ( err , result ) { if ( err ) throw err ; console . log ( result ) ; db . close ( ) ; } ) ; } ) ;
 
连接操作
 
mongoDB 不是一个关系型数据库,但我们可以使用 $lookup 来实现左连接。
 
例如我们有两个集合数据分别为:
 
集合1:orders
 
[
 
  { _id: 1, product_id: 154, status: 1 }
 
]
 
集合2:products
 
[
 
  { _id: 154, name: '笔记本电脑' },
 
  { _id: 155, name: '耳机' },
 
  { _id: 156, name: '台式电脑' }
 
]
 
$lookup 实现左连接
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://127.0.0.1:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; dbo . collection ( ' orders ' ) . aggregate ( [ { $ lookup : { from : ' products ' , // 右集合 localField : ' product_id ' , // 左集合 join 字段 foreignField : ' _id ' , // 右集合 join 字段 as : ' orderdetails ' // 新生成字段(类型array) } } ] ) . toArray ( function ( err , res ) { if ( err ) throw err ; console . log ( JSON . stringify ( res ) ) ; db . close ( ) ; } ) ; } ) ;
 
删除集合
 
我们可以使用 drop() 方法来删除集合:
 
drop()
 
var MongoClient = require ( ' mongodb ' ) . MongoClient ; var url = " mongodb://localhost:27017/ " ; MongoClient . connect ( url , function ( err , db ) { if ( err ) throw err ; var dbo = db . db ( " runoob " ) ; // 删除 test 集合 dbo . collection ( " test " ) . drop ( function ( err , delOK ) { // 执行成功 delOK 返回 true,否则返回 false if ( err ) throw err ; if ( delOK ) console . log ( " 集合已删除 " ) ; db . close ( ) ; } ) ; } ) ;
 
使用 Promise
 
Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。
 
如果你还不了解 Promise,可以参考 JavaScript Promise。
 
以下实例使用 Promise 创建集合:
 
实例
 
const MongoClient = require ( " mongodb " ) . MongoClient ; const url = " mongodb://localhost/runoob " ; MongoClient . connect ( url ) . then ( ( conn ) => { console . log ( " 数据库已连接 " ) ; var dbase = conn . db ( " runoob " ) ; dbase . createCollection ( " site " ) . then ( ( res ) => { console . log ( " 已创建集合 " ) ; } ) . catch ( ( err ) => { console . log ( " 数据库操作错误 " ) ; } ) . finally ( ( ) => { conn . close ( ) ; } ) ; } ) . catch ( ( err ) => { console . log ( " 数据库连接失败 " ) ; } ) ;
 
Promise 数据操作
 
现在我们在一个程序中实现四个连续操作:增加 、查询 、更改 、删除。
 
实例
 
const MongoClient = require ( " mongodb " ) . MongoClient ; const url = " mongodb://localhost/ " ; MongoClient . connect ( url ) . then ( ( conn ) => { console . log ( " 数据库已连接 " ) ; const test = conn . db ( " testdb " ) . collection ( " test " ) ; // 增加 test . insertOne ( { " site " : " runoob.com " } ) . then ( ( res ) => { // 查询 return test . find ( ) . toArray ( ) . then ( ( arr ) => { console . log ( arr ) ; } ) ; } ) . then ( ( ) => { // 更改 return test . updateMany ( { " site " : " runoob.com " } , { $ set : { " site " : " example.com " } } ) ; } ) . then ( ( res ) => { // 查询 return test . find ( ) . toArray ( ) . then ( ( arr ) => { console . log ( arr ) ; } ) ; } ) . then ( ( ) => { // 删除 return test . deleteMany ( { " site " : " example.com " } ) ; } ) . then ( ( res ) => { // 查询 return test . find ( ) . toArray ( ) . then ( ( arr ) => { console . log ( arr ) ; } ) ; } ) . catch ( ( err ) => { console . log ( " 数据操作失败 " + err . message ) ; } ) . finally ( ( ) => { conn . close ( ) ; } ) ; } ) . catch ( ( err ) => { console . log ( " 数据库连接失败 " ) ; } ) ;
 
执行结果:
 
数据库已连接
 
[ { _id: 5f1664966833e531d83d3ac6, site: 'runoob.com' } ]
 
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
 
[]
 
用异步函数实现相同的数据操作
 
实例
 
const MongoClient = require ( " mongodb " ) . MongoClient ; const url = " mongodb://localhost/ " ; async function dataOperate ( ) { var conn = null ; try { conn = await MongoClient . connect ( url ) ; console . log ( " 数据库已连接 " ) ; const test = conn . db ( " testdb " ) . collection ( " test " ) ; // 增加 await test . insertOne ( { " site " : " runoob.com " } ) ; // 查询 var arr = await test . find ( ) . toArray ( ) ; console . log ( arr ) ; // 更改 await test . updateMany ( { " site " : " runoob.com " } , { $ set : { " site " : " example.com " } } ) ; // 查询 arr = await test . find ( ) . toArray ( ) ; console . log ( arr ) ; // 删除 await test . deleteMany ( { " site " : " example.com " } ) ; // 查询 arr = await test . find ( ) . toArray ( ) ; console . log ( arr ) ; } catch ( err ) { console . log ( " 错误: " + err . message ) ; } finally { if ( conn != null ) conn . close ( ) ; } } dataOperate ( ) ;
 
运行结果:
 
数据库已连接
 
[ { _id: 5f169006a2780f0cd4ea640b, site: 'runoob.com' } ]
 
[ { _id: 5f169006a2780f0cd4ea640b, site: 'example.com' } ]
 
[]
 
运行结果完全一样。
 
很显然,异步函数是一种非常良好的编程风格,在多次使用异步操作的时候非常实用。
 
但是请勿在低于 7.6.0 版本的 node.js 上使用异步函数。
 

 
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章