Estoy haciendo un proyecto Node.js que contiene subproyectos. Un subproyecto tendrá una base de datos Mongodb y Mongoose se utilizará para envolver y consultar la base de datos. Pero el problema es
- Mongoose no permite el uso de varias bases de datos en una sola instancia de mangosta, ya que los modelos se basan en una sola 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 almacenamiento en caché en
require()
. Sé deshabilitar el almacenamiento en caché del módulo en Node.js, pero creo que no es la buena solución, ya que solo es necesario para la mangosta.He intentado 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 subproyecto, pero arroja
RangeError: Maximum call stack size exceeded
.
Quiero saber, ¿hay alguna forma de usar múltiples bases de datos con mangosta o alguna solución para este problema? Porque creo que la mangosta es bastante fácil y rápida. ¿O algún otro módulo como recomendación?
useDb
comando que usa el mismo grupo de conexiones.De acuerdo con el manual fino ,
createConnection()
se puede utilizar para conectarse a varias bases de datos.Sin embargo, debe crear modelos separados para cada conexión / base de datos:
Estoy bastante seguro de que puede compartir el esquema entre ellos, pero debe verificarlo para asegurarse.
fuente
useDb()
disponible en 3.8 para compartir el grupo de conexiones subyacente: github.com/LearnBoost/mongoose/wiki/…var newSchema = new mongoose.Schema({ ... })
,var model2 = conn1.model('newModel', newSchema)
,var model2 = conn2.model('newModel', newSchema)
Bastante tarde, pero esto podría ayudar a alguien. Las respuestas actuales asumen que está utilizando el mismo archivo para sus conexiones y modelos.
En la vida real, existe una alta probabilidad de que divida sus modelos en diferentes archivos. Puede usar algo como esto en su archivo principal:
que es exactamente como se describe en los documentos. Y luego, en sus archivos de modelo, haga algo como lo siguiente:
Donde myDB es el nombre de su base de datos.
fuente
test
y también para evitar tener múltiples conexiones. Sin embargo, también.db
al final (const v1 = mongoose.connection.useDb('test').db
), ya que la antigua base de datos no necesita ser administrada por mangosta.Como enfoque alternativo, Mongoose exporta un constructor para una nueva instancia en la instancia predeterminada. Entonces, algo como esto es posible.
Esto es muy útil cuando se trabaja con fuentes de datos independientes y también cuando se desea tener un contexto de base de datos independiente para cada usuario o solicitud. Deberá tener cuidado, ya que es posible crear MUCHAS conexiones al hacer esto. Asegúrese de llamar a desconectar () cuando las instancias no sean necesarias y también de limitar el tamaño del grupo creado por cada instancia.
fuente
await instance1.connection.collection('foo').insert({ foo: 'bar', }) await instance2.connection.collection('foo').insert({ foo: 'zoo', })
Una solución un poco optimizada (para mí al menos). escriba esto en un archivo db.js y solicítelo donde sea necesario y llámelo con una llamada de función y estará listo para comenzar.
fuente