在Node.js中的Mongodb集合对象caching

我试图在Node.js中实现一个RESTful(ish)接口到MongoDB数据库。 根据文档 ,基本的习惯是这样的:

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 }); } }); 

所以有三个对象(服务器,数据库和集合)涉及基本的数据库访问。 我的问题是,哪些可以/应该在启动时加载并caching在某个地方,以便每个http请求被重用,以及每个请求必须/应该被重新创build。 我的假设是,服务器和数据库对象可以长期居住,但我不太确定收集对象。

保存所有三件事(服务器连接,数据库和收集),并启动您的应用程序。 如Mongoose的 MongoDB的ODMs自己,如果你有疑问。 您可能想要使用asynchronous来避免嵌套太深的代码。

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

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

为什么不呢? 集合对象本身并不消耗太多的内存,它提供了与MongoDB交互,查询,保存等所有function。 根据每个请求重新创build它,然后删除它是没有意义的。

一般来说,打开的callback应该启动逻辑来启动应用程序/服务器的其余部分。 然后你只要坚持这个数据库引用和每个请求调用db.collection。 我通常有一个服务,我可以调用从我的REST资源获取数据库引用,以保持一切清洁。 这又可以根据应用程序中的数据库/集合使用情况而有所不同。