Home >Database >Mysql Tutorial >[MongoDB学习笔记-02] Node.js连接MongoDB的两种方法

[MongoDB学习笔记-02] Node.js连接MongoDB的两种方法

WBOY
WBOYOriginal
2016-06-07 14:50:191133browse

MongoDB Node.js驱动程序是被官方所支持的原生Node.js驱动程序,他是至今为止最好的实现, 并且得到了MongoDB官方的支持。MongoDB团队已经采用MongoDB Node.js驱动程序作为标准方法。 npm install mongodb @1 .4 .3 // MongoDB Node.js驱动程序 npm install

这里写图片描述

MongoDB Node.js驱动程序是被官方所支持的原生Node.js驱动程序,他是至今为止最好的实现, 并且得到了MongoDB官方的支持。MongoDB团队已经采用MongoDB Node.js驱动程序作为标准方法。

<code class=" hljs mel">npm install mongodb<span class="hljs-variable">@1</span><span class="hljs-number">.4</span><span class="hljs-number">.3</span>     <span class="hljs-comment">// MongoDB Node.js驱动程序</span>
npm install mongoose<span class="hljs-variable">@3</span><span class="hljs-number">.8</span><span class="hljs-number">.8</span>    <span class="hljs-comment">//mongoose模块</span></code>

要从Node.js连接MongoDB数据库我们有两种方法可选择:

  1. 通过实例化mongodb模块中提供的mongodbClient类,然后使用这个实例化的对象来创建和管理mongodb连接;
  2. 使用字符串进行连接;

1、通过client对象连接到MongoDB

通过实例化一个MongoClient对象连接MongoDB数据库是最常用也是最佳的方式。

创建MongoClient对象实例的语法:

<code class=" hljs axapta">MongoClient( <span class="hljs-keyword">server</span>, options );</code>

server : 一个serverd对象;
options : 数据库连接选项;

这里写图片描述

如上图所示,MongoClient连接利用了后台的Server对象。这个对象的功能就是定义了MongoDB驱动程序怎么连接到服务器。

下面,看一个示例:

<code class=" hljs javascript"><span class="hljs-keyword">var</span> MongoClient = <span class="hljs-built_in">require</span>(<span class="hljs-string">'mongodb'</span>).MongoClient,  
    Server      = <span class="hljs-built_in">require</span>(<span class="hljs-string">'mongodb'</span>).server;

<span class="hljs-comment">// 创建客户端连接对象</span>
<span class="hljs-keyword">var</span> client = <span class="hljs-keyword">new</span> MongoClient( <span class="hljs-keyword">new</span> Server(<span class="hljs-string">'localhost'</span>, <span class="hljs-number">27017</span>, {
                                            socketOpations: { connectTimeoutMS: <span class="hljs-number">500</span> },
                                            poolSize: <span class="hljs-number">5</span>,
                                            auto_reconnect: <span class="hljs-literal">true</span>
                                        }, {
                                            numberOfRetries: <span class="hljs-number">3</span>,
                                            retryMilliSeconds: <span class="hljs-number">500</span>
                                        }));

<span class="hljs-comment">// 打开对服务器端MongoDB数据库的连接</span>
client.open(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(err, client)</span> {</span>
    <span class="hljs-keyword">if</span> ( err ) {
        console.log(<span class="hljs-string">'连接失败!'</span>);
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">var</span> db = client.db(<span class="hljs-string">'blogdb'</span>);  <span class="hljs-comment">// 建立到数据库blogdb的连接</span>
        <span class="hljs-keyword">if</span> ( db ) {
            console.log(<span class="hljs-string">'连接成功'</span>);
            db.authenticate(<span class="hljs-string">'username'</span>, <span class="hljs-string">'pwd'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(err, result)</span> {</span>   <span class="hljs-comment">// 对用户数据库身份进行验证</span>
                <span class="hljs-keyword">if</span> ( err ) {
                    console.log(<span class="hljs-string">'数据库用户身份验证失败'</span>);
                    client.close();  <span class="hljs-comment">// 关闭对MongoDB的连接</span>
                    console.log(<span class="hljs-string">'连接已关闭......'</span>);
                } <span class="hljs-keyword">else</span> {
                    console.log(<span class="hljs-string">'用户身份验证通过'</span>);
                    db.logout(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(err, result)</span> {</span>  <span class="hljs-comment">// 关闭对数据库的连接,即退出数据库</span>
                        <span class="hljs-keyword">if</span> ( !err ) {
                            console.log(<span class="hljs-string">'退出数据库出错'</span>);
                        }

                        client.close();  <span class="hljs-comment">// 关闭对MongoDB的连接</span>
                        console.log( <span class="hljs-string">'已关闭连接......'</span> );
                    });
                }
            });
        }
    }
});</code>

注意: 要注销数据库,要使用数据库对象上的logout()方法。这将关闭到该数据库上的连接,你不在可以使用Db对象。例如: db.logout();而要关闭到MongoDB的连接,要在客户端连接上调用close()方法,例如: client.close()

写入关注

首先,我们在连接数据库的时候会用到一个关于写入关注级别的问题,说白了,个人理解的话就是相当于出现问题的一个处理优先顺序,你可以选择写入数据库之前是否需要你确认之类的,或者发生错误是否忽略之类的等等,如下图:

写 入 级 别 说 明
-1 网络错误被忽略
0 写确认是不必要的
1 请求写确认
2 写确认请求跨主服务器和副本集中的一个辅助服务器
majority 写确认是从副本集的主服务器请求的

用来创建MongoClient连接的Server对象的选项,如下:

这里写图片描述

用来创建MongoClient连接的数据库连接选项,如下:

这里写图片描述


2、通过一个连接字符串连接到MongoDB

这种方式要调用MongoClient类的connect( )方法。connect使用语法如下:

<code class=" hljs perl">MongoClient.<span class="hljs-keyword">connect</span>(connString, options, callback)</code>

connString字符串的语法如下:

<code class=" hljs cs">mongodb:<span class="hljs-comment">//username:password@host:port/database?opations</span></code>

MongoClient连接字符串组件:

选 项 说 明
mongodb:// 指定字符串使用mongodb的连接格式
username 验证时使用的用户名。可选
password 身份验证时使用的密码。可选
host MongoDB服务器主机名或者域名。它可以是多个host:port组合来连接多个MongoDB服务器。 例如:mongodb://host1:270017, host2://270017, host3:270017/testDB
port 连接MongoDB服务器时使用的端口。默认值是27017
database 要连接的数据库的名字。 默认为admin
options 连接时所使用的选项的键值对。可以在dbOpt和serverOpt参数上指定这些选项

下面,看一个使用连接字符串方法连接MongoDB数据库的示例:

<code class=" hljs javascript"><span class="hljs-keyword">var</span> MongoClient = <span class="hljs-built_in">require</span>(<span class="hljs-string">'mongodb'</span>).MongoClient;
MongoClient.connect(<span class="hljs-string">'mongodb://mongodb:test@localhost:27017/blogdb'</span>, {
                        db: { w: <span class="hljs-number">1</span>, native_parser: <span class="hljs-literal">false</span> },
                        server: {
                            poolSize: <span class="hljs-number">5</span>,
                            socketOpations: { connectTimeoutMS: <span class="hljs-number">500</span> },
                            auto_reconnect: <span class="hljs-literal">true</span>
                        },
                        replSet: {},
                        mongos: {}

                    }, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(err, db)</span> {</span>
                        <span class="hljs-keyword">if</span> ( err ) {
                            console.log(<span class="hljs-string">'连接失败!'</span>);
                        } <span class="hljs-keyword">else</span> {
                            console.log(<span class="hljs-string">'连接成功!'</span>);
                            <span class="hljs-comment">// 注销数据库</span>
                            db.logout(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(err, result)</span> {</span>
                                <span class="hljs-keyword">if</span> ( err ) {
                                    console.log(<span class="hljs-string">'注销失败...'</span>);
                                }

                                db.close();  <span class="hljs-comment">// 关闭连接</span>
                                console.log(<span class="hljs-string">'连接已经关闭!'</span>);
                            });
                        }

});</code>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn