2016-05-26 1 views
0

Мне не удалось найти какие-либо документы, в которых было бы плохой/хорошей идеей сохранить ссылку на коллекцию, чтобы ее можно было повторно использовать после установления соединения db.Native MongoDB Driver Node.js - мы должны хранить коллекции?

например, в нашей базе данных.ts, которая вызывается во время запуска нашего сервера. Он будет собирать коллекции и хранить их для использования в модуле, которые затем могут быть ссылками на весь проект.

пример хранения коллекции

/*database.ts*/ 
 
//module to keep 1 connection alive and allow us to have 1 instance of our collections. 
 
import {MongoClient, Db, Collection } from 'mongodb'; 
 

 
let uri: string = 'connection_string'; 
 

 
export let db: Db; 
 

 
export let usrCollection: Collection; 
 

 
export let bookCollection: Collection; 
 

 
export function initDb(cb: any) { 
 
    MongoClient.connect(uri, function(err, database) { 
 
    //handle err   
 

 
    db = database; 
 
    cb(); //returns now since db is assigned. 
 
    }); 
 
} 
 

 
export function initCollections() { 
 
    usrCollection = db.collection('users'); //non-async 
 
    bookCollection = db.collection('book'); //non-async 
 
} 
 

 
    
 
/*app.ts*/ 
 
    
 
//in our express app when it start up 
 
import {db, initCollections, initDb} from './database'; 
 

 
initDb(function() { 
 
    //this will hold up our server from starting BUT 
 
    //there is no reason to make it async. 
 
    initCollections(); 
 
});

что некоторые из короткой пришествии этой модели/строить? что я могу улучшить и чего я должен избегать для производительности, особенно если вы управляете коллекциями. Может ли этот шаблон сохранить ошибку исходного кода или легко найти ошибки и расширять их в будущем? или есть даже лучший шаблон - пожалуйста, не удаляйте библиотеку, кроме встроенного драйвера mongodb для решений node.js, таких как mongoose.

ответ

0

ИМО, это не очень хорошая практика. Пользователи database.ts должны будут убедиться, что они инициализировали эти коллекции перед их использованием. Я даже не буду экспортировать какие-либо внутренние коллекции, так как пользователю все равно, как структурируется база данных. Вы должны экспортировать некоторые функции работы, такие как function addUser(user: User) {/.../}. Существует neat code sample created by MS.

// Редактировать. Да, вы можете хранить коллекцию ссылок внутри, так что вам не нужно вводить имена коллекций каждый раз. Легко вводить ошибки, игнорируя единственное и множественное число. Наилучшей практикой будет:

import mongodb = require('mongodb'); 

const server = new mongodb.Server('localhost', 27017, {auto_reconnect: true}) 
const db = new mongodb.Db('mydb', server, { w: 1 }); 
db.open(function() {}); 
const userCollection =db.collection("users"); 
const bookCollection = db.collection("book"); 
+0

но сохраните ли вы коллекцию для повторного использования? или снова в каждой функции вам нужно будет захватить обработчик для конкретной коллекции? увидев пример, который вы поделили, он постоянно вызывает метод db.collection, а не сохраняет его один раз в частном порядке и используя его. Я просто понял, что обнародовать коллекции - тоже ужасная идея, но внутренне в модуле было бы/нужно ли хранить ссылку на коллекцию? – Andrei

+1

Да, я буду хранить коллекции. Причина заключается не в эффективности, а в уменьшении ошибок, вызванных опечаткой в ​​строке («пользователи» <=> «пользователь»). @AndreiM. – Zen

Смежные вопросы