362 Stimmen

Wie verwalte ich MongoDB-Verbindungen in einer Node.js-Webanwendung?

Ich benutze die node-mongodb-native Treiber mit MongoDB, um eine Website zu schreiben.

Ich habe einige Fragen zur Verwaltung von Verbindungen:

  1. Reicht es aus, nur eine MongoDB-Verbindung für alle Anfragen zu verwenden? Gibt es irgendwelche Leistungsprobleme? Wenn nicht, kann ich eine globale Verbindung einrichten, die für die gesamte Anwendung verwendet wird?

  2. Wenn nicht, ist es gut, wenn ich eine neue Verbindung öffne, wenn die Anfrage ankommt, und sie schließe, wenn die Anfrage bearbeitet wurde? Ist es teuer, eine Verbindung zu öffnen und zu schließen?

  3. Sollte ich einen globalen Verbindungspool verwenden? Ich habe gehört, dass der Treiber einen nativen Verbindungspool hat. Ist das eine gute Wahl?

  4. Wenn ich einen Verbindungspool verwende, wie viele Verbindungen sollten verwendet werden?

  5. Gibt es noch andere Dinge, die ich beachten sollte?

1voto

kyle_aoki Punkte 197

Für den Fall, dass jemand etwas, das in 2021 mit Typescript arbeitet will, ist hier, was ich benutze:

import { MongoClient, Collection } from "mongodb";

const FILE_DB_HOST = process.env.FILE_DB_HOST as string;
const FILE_DB_DATABASE = process.env.FILE_DB_DATABASE as string;
const FILES_COLLECTION = process.env.FILES_COLLECTION as string;

if (!FILE_DB_HOST || !FILE_DB_DATABASE || !FILES_COLLECTION) {
  throw "Missing FILE_DB_HOST, FILE_DB_DATABASE, or FILES_COLLECTION environment variables.";
}

const client = new MongoClient(FILE_DB_HOST, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

class Mongoose {
  static FilesCollection: Collection;

  static async init() {
    const connection = await client.connect();
    const FileDB = connection.db(FILE_DB_DATABASE);
    Mongoose.FilesCollection = FileDB.collection(FILES_COLLECTION);
  }
}

Mongoose.init();

export default Mongoose;

Ich glaube, wenn eine Anfrage zu früh erfolgt (bevor Mongo.init() Zeit zum Beenden hat), wird ein Fehler ausgelöst, da Mongoose.FilesCollection undefiniert sein wird.

import { Request, Response, NextFunction } from "express";
import Mongoose from "../../mongoose";

export default async function GetFile(req: Request, res: Response, next: NextFunction) {
  const files = Mongoose.FilesCollection;
  const file = await files.findOne({ fileName: "hello" });
  res.send(file);
}

Wenn Sie zum Beispiel files.findOne({ ... }) y Mongoose.FilesCollection undefiniert ist, erhalten Sie eine Fehlermeldung.

-1voto

Patel Vaghesh Punkte 43

Mit der folgenden Methode können Sie ganz einfach so viele Verbindungen wie möglich verwalten

var mongoose = require('mongoose');

//Set up default mongoose connection
const bankDB = ()=>{
    return  mongoose.createConnection('mongodb+srv://<username>:<passwprd>@mydemo.jk4nr.mongodb.net/<database>?retryWrites=true&w=majority',options);

}

bankDB().then(()=>console.log('Connected to mongoDB-Atlas bankApp...'))
       .catch((err)=>console.error('Could not connected to mongoDB',err));

//Set up second mongoose connection
const myDB = ()=>{
    return  mongoose.createConnection('mongodb+srv://<username>:<password>@mydemo.jk4nr.mongodb.net/<database>?retryWrites=true&w=majority',options);

}
myDB().then(()=>console.log('Connected to mongoDB-Atlas connection 2...'))
       .catch((err)=>console.error('Could not connected to mongoDB',err));

module.exports = { bankDB(), myDB() };

-1voto

Merrin K Punkte 1306
npm i express mongoose

mongodb.js

const express = require('express');
const mongoose =require('mongoose')
const app = express();

mongoose.set('strictQuery', true);
mongoose.connect('mongodb://localhost:27017/db_name', {
    useNewUrlParser: true, 
    useUnifiedTopology: true
})
.then(() => console.log('MongoDB Connected...'))
.catch((err) => console.log(err))

app.listen(3000,()=>{ console.log("Started on port 3000 !!!") })

node mongodb.js

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X