2013-12-12 96 views
8

我在nodejs上使用了mongodb驱动程序和修士。举例如this,我在网络上看到有以下模式:MongoDB node.js驱动程序和修士

var mongo = require('mongodb'); 
var monk = require('monk'); 

var db = monk('localhost:27017/userdb'); 
var collection = db.get('users'); 
collection.find({}, function(err, docs) { 
    // do something with docs 
}); 

两个问题:

  1. 为什么第一线需要的:var蒙戈=需要(“mongodb的”)?变量mongo从不使用。不会和尚自动要求mongodb?
  2. 我在驱动程序级别看到db必须打开和关闭。这些方法似乎并不存在于和尚的层面。修士会自动打开和关闭连接吗?这个怎么用?

事实上,我想知道和尚提供的优点是直接使用驱动程序。我阅读了monk docs中的功能列表,但并不真正了解其优点。

在此先感谢您的帮助。

回答

4

回答一些具体的,根据我自己的经验:

1)你是正确的,因为MongoDB的变量不是必需的。我不知道为什么它出现在所有的教程中。然而,mongodb IS需要作为依赖,除了和尚。 2)如您所怀疑的,您确实需要调用db.close(),否则连接将保持打开状态。这似乎没有记录在任何地方。当你按照这个教程时,你可以看到当地MongoDB开放连接数量的增长。您可能已经阅读过,修士的目标是提供比mongodb自己的驱动程序更友好的API。我没有足够的经验来说明它是否达到这个目标。

+0

感谢您分享您的体验。 – Naresh

+1

关于#1 - 通过单独要求mongodb,您可以控制mongodb的版本。您可能正在使用本地或全局版本的mongodb,您可能正在使用旧版本甚至更新的beta版本。如果僧侣自己需要mongo,那么您无法控制它使用的安装或版本。 –

+0

它看起来像你不应该担心关闭你的连接。 http://stackoverflow.com/questions/14495975/why-is-it-recommended-not-to-close-a-mongodb-connection-anywhere-in-node-js-code – reergymerej

相关问题