【问题标题】:best way to execute query in mongodb(3.0 drivers) and nodejs在 mongodb(3.0 驱动程序)和 nodejs 中执行查询的最佳方法
【发布时间】:2018-01-30 20:07:01
【问题描述】:

db.js

  var mongodb = require('mongodb').MongoClient;
  var settings = require("./settings.js");
  var ObjectId = require('mongodb').ObjectID;
  var db = {
    selectData: function(collection, query, callback, project = false) {
      mongodb.connect(settings.db_url, function(err, client) {
        var database = client.db(settings.db_name);
        if (err) throw err;
        if (project !== false) {
          console.log("Project is not false");
          console.log( project);
          database.collection(collection).find(query, project).toArray(function(err, result) {
            client.close();
            if (err) throw err;
            callback(result);
          });
        } else {
          database.collection(collection).find(query).toArray(function(err, result) {
            client.close();
            if (err) throw err;
            callback(result);
          });
        }
      });
    }
  }


  module.exports = db;

server.js

这是一个简单的查询,单个数据库调用需要几秒钟的时间,没什么大不了的,但根据专家的说法,这仍然不是一个好方法。

var db = require("db.js");
db.selectData("testCollection",{},function(data){
console.log(data);
});

现在这里是一个多查询嵌套数据库调用,它需要更多时间并且对性能和速度非常不利

 var db = require("db.js");
    db.selectData("testCollection", {}, function(data) {
      db.selectData("testCollection", {}, function(data) {
        db.selectData("testCollection", {}, function(data) {
          db.selectData("testCollection", {}, function(data) {
            db.selectData("testCollection", {}, function(data) {
              console.log(data);
            });
          });
        });
      });
    });

我想要的是打开连接一次并在外部使用 db 对象,而无需为每个请求或嵌套查询一次又一次地连接以实现快速响应

我也知道使用 mongodb nodejs 2.3 驱动程序 是可能的,我已经对其进行了完美测试,但我正在寻找解决方案如何使用 mongodb nodejs 3.0 驱动程序

简而言之,我正在寻找一种可以连接一次并更快地执行查询以进行聊天和实时应用程序以及性能优化的方法

谢谢。

【问题讨论】:

    标签: node.js database mongodb


    【解决方案1】:

    在这里我找到了一个很棒的使用 nodejs 3.0 Mongodb 驱动程序的代码

    const MongoClient = require('mongodb').MongoClient;
    const assert = require('assert');
    var express = require('express');
    var app = express();
    const url = 'mongodb://Your connection string';
    const dbName = 'your database name';
    
    
    
    MongoClient.connect(url, function(err, client) {
      const db = client.db(dbName);
    
      app.get("/", function(req, res) {
        db.collection("somedata").find({}).toArray(function(err, result) {
          if (err) throw err;
          res.send(JSON.stringify(result));
        });
      });
      app.listen(3000);
    });
    

    如果数据库连接丢失,您可以再次连接,而不是为每个请求一次又一次地连接并使用它以获得最佳方式,但在这里您必须使用一些逻辑来再次使该连接和应用程序路由生效

    这对我有用,我希望它对寻找这个问题的答案的开发人员有用

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 2020-02-17
      相关资源
      最近更新 更多