javascript - tutorial - mongoose update
Mongoose y base de datos múltiple en el proyecto single node.js (4)
Como enfoque alternativo, Mongoose exporta un constructor para una nueva instancia en la instancia predeterminada. Entonces algo como esto es posible.
var Mongoose = require(''mongoose'').Mongoose;
var instance1 = new Mongoose();
instance1.connect(''foo'');
var instance2 = new Mongoose();
instance2.connect(''bar'');
Esto es muy útil cuando se trabaja con fuentes de datos separadas, y también cuando se quiere tener un contexto de base de datos separado para cada usuario o solicitud. Deberá tener cuidado, ya que es posible crear MUCHAS conexiones al hacer esto. Asegúrese de llamar a disconnect () cuando las instancias no sean necesarias, y también para limitar el tamaño de la agrupación creada por cada instancia.
Estoy haciendo un proyecto Node.js que contiene subproyectos. Un sub proyecto tendrá una base de datos Mongodb y Mongoose se usará para envolver y consultar db. Pero el problema es
- Mongoose no permite utilizar bases de datos múltiples en una única instancia de mangosta, ya que los modelos se basan en una conexión.
Para usar múltiples instancias de mangosta, Node.js no permite múltiples instancias de módulo ya que tiene un sistema de caché en
require()
. Sé que puedo desactivar el almacenamiento en caché de módulos en Node.js, pero creo que no es una buena solución, ya que solo es necesario para la mangosta.Intenté usar
createConnection()
yopenSet()
en mangosta, pero no fue la solución.Intenté copiar en profundidad la instancia de mangosta ( http://blog.imaginea.com/deep-copy-in-javascript/ ) para pasar nuevas instancias de mangosta al proyecto secundario, pero arrojando
RangeError: Maximum call stack size exceeded
.
Quiero saber si de todos modos hay que usar una base de datos múltiple con mangosta o alguna solución para este problema. Porque creo que la mangosta es bastante fácil y rápida. O cualquier otro módulo como recomendaciones?
De acuerdo con el fino manual , createConnection()
se puede usar para conectarse a múltiples bases de datos.
Sin embargo, debe crear modelos separados para cada conexión / base de datos:
var conn = mongoose.createConnection(''mongodb://localhost/testA'');
var conn2 = mongoose.createConnection(''mongodb://localhost/testB'');
// stored in ''testA'' database
var ModelA = conn.model(''Model'', new mongoose.Schema({
title : { type : String, default : ''model in testA database'' }
}));
// stored in ''testB'' database
var ModelB = conn2.model(''Model'', new mongoose.Schema({
title : { type : String, default : ''model in testB database'' }
}));
Estoy bastante seguro de que puede compartir el esquema entre ellos, pero debe verificar para asegurarse.
Muy tarde, pero esto podría ayudar a alguien. Las respuestas actuales asumen que está usando el mismo archivo para sus conexiones y modelos.
En la vida real, hay una alta probabilidad de que esté dividiendo sus modelos en diferentes archivos. Puedes usar algo como esto en tu archivo principal:
mongoose.connect(''mongodb://localhost/default'');
const db = mongoose.connection;
db.on(''error'', console.error.bind(console, ''connection error:''));
db.once(''open'', () => {
console.log(''connected'');
});
que es exactamente como se describe en los documentos. Y luego en los archivos de su modelo, haga algo como lo siguiente:
import mongoose, { Schema } from ''mongoose'';
const userInfoSchema = new Schema({
createdAt: {
type: Date,
required: true,
default: new Date(),
},
// ...other fields
});
const myDB = mongoose.connection.useDb(''myDB'');
const UserInfo = myDB.model(''userInfo'', userInfoSchema);
export default UserInfo;
Donde myDB es su nombre de base de datos.
Una cosa que puede hacer es, puede tener subcarpetas para cada proyecto. Por lo tanto, instale mongoose en esas subcarpetas y requiera () mangosta de sus propias carpetas en cada subaplicación. No desde el proyecto raíz o desde global. Entonces, un proyecto secundario, una instalación de mangosta y una instancia de mangosta.
-app_root/
--foo_app/
---db_access.js
---foo_db_connect.js
---node_modules/
----mongoose/
--bar_app/
---db_access.js
---bar_db_connect.js
---node_modules/
----mongoose/
En foo_db_connect.js
var mongoose = require(''mongoose'');
mongoose.connect(''mongodb://localhost/foo_db'');
module.exports = exports = mongoose;
En bar_db_connect.js
var mongoose = require(''mongoose'');
mongoose.connect(''mongodb://localhost/bar_db'');
module.exports = exports = mongoose;
En archivos db_access.js
var mongoose = require("./foo_db_connect.js"); // bar_db_connect.js for bar app
Ahora puede acceder a múltiples bases de datos con mangosta.