MongoDB Node.js驱动程序和Monk

8
我正在使用Nodejs上的mongodb驱动程序和monk。像这个网站上看到的示例具有以下模式:
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 mongo = require('mongodb')? 变量mongo从未被使用,难道不是monk自动要求mongodb吗?
  2. 我在驱动程序级别看到,必须打开和关闭数据库。这些方法似乎在monk级别不存在。monk是否自动打开和关闭连接?这是如何实现的?

事实上,我想知道使用monk相较于直接使用驱动程序有什么优势。我阅读了monk文档中的功能列表,但并不真正理解它的好处。

感谢您的帮助。

1个回答

6
为了回答一些具体的问题,根据我的经验:
1)您是正确的,mongodb变量不是必需的。我不知道为什么所有的教程中都有它的出现。然而,mongodb作为依赖项是需要的,另外还要用到monk。
2)正如您所怀疑的那样,你确实需要调用db.close(),否则连接将保持开放状态。这似乎没有在任何地方得到记录。当你按照该教程操作时,你会发现与本地mongodb的开放连接数量增加了。
正如您可能已经阅读过的那样,monk的目标是提供比mongodb自己的驱动程序更友好的API。我没有足够的经验来说它是否达成了这个目标。

1
关于#1-通过单独要求mongodb,您可以控制mongodb的版本。您可能正在使用本地或全局版本的mongodb,您可能正在使用旧版本甚至是新的beta版本。如果monk自己需要mongo,您将无法控制它使用哪个安装或版本。 - Ryan Wheale
看起来你不需要担心关闭连接的问题。https://dev59.com/ImYq5IYBdhLWcg3wbgDk - reergymerej
在这种情况下,mongoDB不会重复使用您留下的连接,因此上面的代码正在打开越来越多的连接并将它们保持打开状态。然而,我完全同意,最好打开和重用一个连接(或一小组连接),而不是为每个数据库交互打开和关闭一个新连接。 - swilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接