我对这两个 node 都不熟悉.js和MongoDB,但我已经设法将SO和mongo的文档中的一些部分整合在一起.

Mongo documentetion给出了一个例子:

// Retrieve
var MongoClient = require('mongodb').MongoClient;

// Connect to the db
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
  if(!err) {
    console.log("We are connected");
  }
});

如果我只需要在一个地方的一个函数中使用DB,这看起来很好.搜索和阅读SO向我表明,我不应该每次都打开一个新连接,而是应该使用一个池并重用我第一次获得的数据库对象.这个答案非常丰富,但我甚至不知道如何首先获得DB对象,然后如何重用它.

假设我有 node .上面的js代码在我的应用程序中.js,然后我有不同的路由需要在db上运行不同的操作,比如:

app.post('/employee', function(req, res){
    //Put req.name in database
});


app.post('/car', function(req, res){
    //Put req.car in database
});

我该如何把这两个片段组合成有用的东西呢?

我在http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html08170/node-js-reuse-mongodb-reference">Node.js reuse MongoDB reference中发现了一个类似的问题,但从这个(http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html)的外观来看,我似乎应该使用MongoClient而不是db().我也不确定它是否能解决我的问题...

推荐答案

您可以编写一个模块来初始化数据库连接,并使它们在整个程序中都可以访问.例如:

Mongo .js

var mongodb = require('mongodb');

module.exports.init = function (callback) {
  var server = new mongodb.Server("127.0.0.1", 27017, {});
  new mongodb.Db('test', server, {w: 1}).open(function (error, client) {
    //export the client and maybe some collections as a shortcut
    module.exports.client = client;
    module.exports.myCollection = new mongodb.Collection(client, 'myCollection');
    callback(error);
  });
};

应用程序.js

var mongo = require('./Mongo .js');

//setup express...

//initialize the db connection
mongo.init(function (error) {
    if (error)
        throw error;

    app.listen(80); //database is initialized, ready to listen for connections
});

随机文件.js

var mongo = require('./Mongo .js');

module.exports.doInsert = function () {
  //use the collection object exported by Mongo .js
  mongo.myCollection.insert({test: 'obj'}, {safe:true}, function(err, objects) {
    if (err)
        console.warn(err.message);
  });
};

我知道人们谈论池,但当我对池化mongo连接与所有请求的单个连接进行基准测试时,单个连接实际上表现得更好.诚然,这是大约一年前的事了,但我怀疑基本概念是否已经改变.所有的请求都是异步的,所以不需要多个连接才能同时发出请求.

至于MongoClient,我想这是他们鼓励的新语法.无论哪种方式,它本质上都是一个client对象,无论使用哪种样式,都要保留并使其可访问.

Mongodb相关问答推荐

MongoDB.ArrayFilters出错:在路径中找不到标识符';elem';的数组筛选器

在MogoDB中按时间间隔分组、统计文档和获取间隔时间

为什么这个查询可以在MongoDB中使用?

Tableau 与 Mongo DB Atlas by MongoDB 的连接缓存问题

在MongoDb的数组中计算大于某个数字的数字

MongoDB 存储大量指标/分析数据的方法

MongoDb c# driver LINQ vs Native 查询

在 DBeaver 中连接到 Redis 或 MongoDB

聚合/元素子文档作为 mongo 中的顶级文档

在 Heroku 上使用 Node 读取、写入和存储 JSON

mongodb,pymongo,aggregate聚合给出奇怪的输出

使用 MongoDB 进行分页

使用 MongoDB 更新数组字段内的特定键/值

启动mongodb和express的正确方法?

MongoDB:在集合上设置 TTL 索引时出错: sessions

如何使用 java 驱动程序更新 mongo db 中的文档字段?

Mongo聚合框架,排序然后分组不起作用

Mongodb - 如何在多个字段中查找字符串?

通过 Java 执行 Mongo like Query (JSON)

如何在 Ubuntu 10.04 中使用 --auth 选项重新启动 mongodb?