设为首页 收藏本站
查看: 1334|回复: 0

[经验分享] node-mongo-native1.3.19连接mongo的最优方法

[复制链接]

尚未签到

发表于 2016-12-2 08:11:36 | 显示全部楼层 |阅读模式
  最近需要在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并不是node driver自创的,而是mongodb官方推荐的新的连接方式,可以认为是一种规范,各语言的driver是规范的实现。node-mongo-native就是这种规范的一种实现(自1.2版)
  Release Note: Default Write Concern Change
  使用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
DSC0000.jpg

  所以目前官方推荐的做法,是使用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里描述得非常清楚了,需要时可以查看

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308379-1-1.html 上篇帖子: mongo简介——聚合group 下篇帖子: mongo基础笔记1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表