4

我正在尝试在 Node.js 中实现到 MongoDB 数据库的 RESTful(ish) 接口。根据文档,基本的成语是这样的:

var mongo = require('mongodb'),
  Server = mongo.Server,
  Db = mongo.Db;

var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('exampleDb', server);

db.open(function(err, db) {
     if(!err) {
        db.collection('test', function(err, collection) {
            // do stuff with collection
        });
     }
});

因此,基本数据库访问涉及三个对象(服务器、数据库和集合)。我的问题是其中哪些可以/应该在启动时加载并缓存在某个地方以便为每个 http 请求重用,哪些必须/应该在每个请求中重新创建。我的假设是服务器和数据库对象可以长期存在,但我不太确定集合对象。

4

4 回答 4

1

保存所有三件事(服务器连接、数据库和集合)并启动您的应用程序。像Mongoose这样的 MongoDB 的 ODM会自己做,以防您怀疑。您可能希望使用async来避免将代码嵌套得太深。

就个人而言,我使用mongo-lite,它可以让我做var db = require('mongo-lite').connect('mongodb://localhost/exampleDb', ['test']); 之后我可以摆弄 db.test,我的收藏。这为我节省了很多样板。

于 2012-09-30T09:06:18.027 回答
0

为什么不应该呢?集合对象本身并不消耗太多内存,它提供了与mongodb交互、查询、保存等所有功能。在每个请求上重新创建它并在之后删除它是没有意义的。

于 2012-09-29T14:32:03.153 回答
0

集合可以长期存在,尤其是当服务器不运行时,如果有大量这样的集合。这只是您正在使用的内存。

于 2012-09-29T13:19:08.563 回答
0

通常,来自 open 的回调应该启动逻辑以启动应用程序/服务器的其余部分。然后,您只需保留该数据库引用并根据请求调用 db.collection。我通常有一个可以调用的服务来从我的 REST 资源中获取 db ref 以保持一切清洁。同样,这可能会根据应用程序中的 db/collection 使用情况而有所不同。

于 2012-09-30T02:07:30.077 回答