最近需要在node下连接mongo,尝试了很多方法,本文简要总结一下

选择Driver

首先,基本上有4个常见的driver供选择

1.官方的是node-mongo-native

2.基于node-mongo-native,封装的mongoose,是一个ODM小框架

3.kiss小组同样基于node-mongo-native封装的mongoskin

4.mongojs

mongoose要求使用Document Schema,我们目前没有这个需求,所以不想用;mongoskin网上评价还可以,但是其GitHub库很久没更新了,而且查看了源代码,发现它是基于很老版本的node-mongo-native封装的,底层用的API现在都不推荐了,担心如果官方驱动继续升级,mongoskin没人维护;mongojs没怎么了解。总之最后还是决定用官方的node-mongo-native作为driver

重要文档

以下是node-mongo-native的相关文档:

官方Manual

Mongo上该Driver的主页

官方GitHub

其中比较重要的文档:

how to connect in a new and better way

MongoClient API

连接方式

截止到本文,driver的最新版本是1.3.19,由于要向后兼容,所以旧的API只是不推荐使用,并没有删除,介绍的文档又比较少,所以刚上手的时候会比较迷惑应该用哪个API

在1.2版本之前,是通过Db这个对象来连接,从1.2版本开始,推荐使用MongoClient这个对象

使用MongoClient也有2种方式,一种是使用

var MongoClient = require("mongodb").MongoClient; var client  = new MongoClient(); client.open() client.close() client.db()

这几个MongoClient的实例方法,构造方法还涉及到Server、ReplSet、Mongos等,比较繁琐。作者已经不推荐使用了:

deprecate direct Db/Server/ReplSet/Mongos

所以目前官方推荐的做法,是使用Connect URI + MongoClient.connect()方法

示例代码:

var mongoClient = require('mongodb').MongoClient;  var url = "mongodb://localhost:2222,localhost:3333,localhost:4444/mydb?maxPoolSize=10&w=1&journal=true";  // Open the connection to the server mongoClient.connect(url, function (err, db) {      db.collection("test", {}, function (err, collection) {         collection.count(function (err, count) {             console.log("there are " + count + " documents in the collection");             db.close();         });     });  });

使用的是connect url,然后用MongoClient.connect(url, option, callback)函数来连接。上面的例子,在url中指定了dbname,那么会直接创建到目标db的连接。 如果省略dbname,则是创建到admin db的连接,而不是缺省的test db,这和shell的行为不一样

实际上第二个参数option经常是被省略的,option的作用是,某些参数如果在url中没有提供,那么可以在option中指定,或者在option中覆盖url中的配置

回调函数第一个参数是error,第二个参数类型不是MongoClient,而是Db,这是和new MongoClient().open()函数的主要区别

这种方式应该是目前的最佳实践,关键是如何配置连接url,在上面那个 how to connect in a new and better way 里描述得非常清楚了,需要时可以查看

node-mongo-native1.3.19连接mongo的最优方法的更多相关文章

  1. 学习mongo系列(一) win/mac安装 解析 连接

    一.安装mongo数据库 下载链接https://www.mongodb.org/downloads, 在执行如下命令的时候事先按照目录新建如下的目录:(如果数据库安装在D盘就在D盘的根目录下建)&q ...

  2. 将 node.js 的数据保存到 mongo 数据库中

    Mongo 数据库 安装 首先到 Mongo 的官方网站下载安装程序:http://www.mongodb.org/,我下载的文件名为:mongodb-win32-x86_64-2008plus-2. ...

  3. 连接mongo的服务提示:HTTP Status 500 - com.mongodb.MongoException$Network: can't call something

    连接mongo的服务提示以下错误 原因:达到了mongodb启动时预设的最大连接数,无法创建新的连接 HTTP Status 500 - com.mongodb.MongoException$Netw ...

  4. Mongo集群Java连接时UnknownHostException错误

    今天在 Java 连接 Mongo 集群时报了一个超时的错误,但是在本地客户端连接单节点的时候却能连上,具体报的错误如下: Caused by: com.mongodb.MongoTimeoutExc ...

  5. python连接Mongo数据库

    python连接Mongo数据库主要采用pymongo连接,一般情况分为两种连接方式,一种通过指定端口和地址直接连接,另一种通过uri的格式连接 1.通过指定端口和地址连接Mongo conn = M ...

  6. mongo在centos与windows上部署与配置,及远程连接mongo与数据用户和角色分配

    1.下载mongodb社区版: windows 安装包安装: https://www.mongodb.com/download-center#community(mongo下载中心) 配置环境变量 控 ...

  7. Robomongo 0.9.0 连接mongo数据库时,提示连接失败 的解决方案

    Robomongo 0.9.0 连接mongo数据库时,提示连接失败.(IP和端口号确定是对的) 基本注意点: 1.mongodb服务打开,打开时,指定端口号,默认为27017,使用默认值,则不用指定 ...

  8. Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库

    Asp.net Core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库 1.前言 本次主要采用Asp.net core3.1 ...

  9. SSH连接自动断开的解决方法(deb/rpm)

    ######### 修改后的: ## # tail -f -n 20 sshd_config#MaxStartups 10:30:60#Banner /etc/issue.net # Allow cl ...

随机推荐

  1. 简要地写出一个.NET Remoting的示例

    在VS 2008中添加新的类库项目,并命名为NetRmClass,将所属解决方案命名为NetRm,勾选“创建解决方案的目录”.这样,NetRmClass类库项目目录即属于NetRm解决方案,并可以继续 ...

  2. C. Mobile phones

    Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows ...

  3. windows获取时间的方法

    介绍       我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执 行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录 ...

  4. 【Java/Android性能优化1】Android性能调优

    本文参考:http://www.trinea.cn/android/android-performance-demo/ 本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.La ...

  5. 编译代码报出Android library projects cannot be launched错误的解决

    Android library projects cannot be launched错误的解决方法: 右键工程根目录->properties 左侧选择->android

  6. (转)Android学习笔记③——常用快捷键

    常用快捷键 代码跳转 描述:跳转是为了方便代码位置的定位,存在两种跳转:在定义处可以跳转到调用处,在调用处可以跳转到定义处. 快捷键:Cmd + 鼠标单击 方法间跳转 描述:从一个类方法跳转到临近的一 ...

  7. 未能正确加载“radlangsvc.package,radlangsvc.vs,version=10.0.0,culture=neutra

    1: 参考 http://blog.csdn.net/woaizhoulichao1/article/details/6911809 2: 开 始-->所有程序 -->Mircosoft  ...

  8. 存储过程 <3> 和函数的区别

    二.函数和存储过程的优点: 1.共同使用的代码可以只需要被编写一次,而被需要该代码的任何应用程序调用(.net,c++,java,也可以使DLL库). 2.这种几种编写.几种维护更新.大家共享的方法, ...

  9. 插件介绍 :cropper是一款使用简单且功能强大的图片剪裁jQuery插件。

    简要教程 cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. c ...

  10. 关于使用Exception的一点心得

    毫无疑问,Exception有很多优点.查看任何一本面向对象的书籍,都会提到异常相对于返回值标记状态的不足以及避免错误导致程序崩溃的问题.看起来是很好的,用起来也是很好的.可是这么多年过去了,异常用的 ...