usemongoclient openset open mpromise mongoclient library deprecationwarning createconnection node.js mongodb mongoose

node.js - openset - use mongoclient mongoose



¿Cómo configurar useMongoClient(Mongoose 4.11.0)? (12)

Este es el código que uso para conectarme a mi base de datos:

private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> { return Mongoose.connect(databaseUri).then(() => { debug(''Connected to MongoDB at %O'', databaseUri); return Mongoose.connection; }); }

Hoy actualicé Mongoose a la versión 4.11.0 y recibí esta advertencia al ejecutar mis pruebas:

(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`

No puedo encontrar ninguna información sobre cómo "configurar useMongoClient".

¿Ustedes saben cómo?


A mí me funciona usando el mecanografiado:

var dbOpt : any = { useMongoClient: true } mongoose.connect(dbURI, dbOpt);


Agregue {useMongoClient: true} como otro argumento para conectar o crear el método de conexión, depende de la versión de mangosta que esté utilizando.

// Using `mongoose.connect`... var promise = mongoose.connect(''mongodb://localhost/myapp'', { useMongoClient: true, /* other options */ }); // Or `createConnection` var promise = mongoose.createConnection(''mongodb://localhost/myapp'', { useMongoClient: true, /* other options */ });


Así es como utiliza useMongoClient : mongoose.connect(''mongodb://localhost/advisorDemoTestDB'', { useMongoClient: true })


Como dicen muchas respuestas, agregar { useMongoClient: true } en el argumento de opciones para connect o createConnection método de createConnection resolverá el problema.

Por ej.

// With mongoose.connect method mongoose.connect(''mongodb://localhost/app'', { useMongoClient: true }); // With createConnection method mongoose.createConnection(''mongodb://localhost/app'', { useMongoClient: true });

Pero, ¿qué es MongoClinet en primer lugar?

Desde MongoDB Node.js Driver versión 1.2, se introdujo una nueva clase de conexión MongoClient que tiene el mismo nombre en todos los controladores oficiales.

La nueva clase de conexión MongoClient reconoce todas las escrituras a MongoDB , en contraste con la clase de conexión existente Db que tiene los reconocimientos desactivados.

Entonces { useMongoClient: true } le dice a moongoose que use la nueva clase de conexión en lugar de la anterior

Para más información haga clic aquí.


Conéctese a MongoDB con Mongoose 4.11.x (probado con la instancia única mLab y el conjunto de réplicas MongoDB Atlas):

const mongoose = require(''mongoose''); mongoose.Promise = global.Promise; const options = { promiseLibrary: global.Promise, useMongoClient: true, }; function connect() { mongoose.connect(URI, options) .then(function() { const admin = new mongoose.mongo.Admin(mongoose.connection.db); admin.buildInfo(function(err, info) { if (err) { console.err(`Error getting MongoDB info: ${err}`); } else { console.log(`Connection to MongoDB (version ${info.version}) opened successfully!`); } }); }) .catch((err) => console.error(`Error connecting to MongoDB: ${err}`)); } module.exports = connect;

Crear modelo:

const mongoose = require(''mongoose''); const userSchema = new mongoose.Schema({...}); module.exports = mongoose.model(''User'', userSchema);


De acuerdo con la documentation la mongoose , así es como se puede configurar useMongoClient .

function connectDatabase(databaseUri){ var promise = mongoose.connect(''mongodb://localhost/myapp'', { useMongoClient: true, }); return promise; }


La solución más fácil para esto sería abrir su terminal, cambiar su directorio a su proyecto raíz (carpeta donde está package.json )

Correr:
npm remove mongoose

entonces:

npm install [email protected] --save

problema resuelto.

Actualizar no siempre es la mejor opción.

http://mongoosejs.com/docs/connections.html



Error:

(nodo: 1652) DeprecationWarning: open() está en desuso en mangosta> = 4.11.0, use openUri() lugar, o configure la opción useMongoClient si usa connect() o createConnection() .

Solución: para establecer useMongoClient: true en la propiedad de conexión

var promise = mongoose.connect(''mongodb://localhost/myapp'', { useMongoClient: true, /* other options */ });

Ver documentation ahora escuchando por solicitud


Sin Typecript , puede ignorar el problema y usar Mongoose.connect(databaseUri, { useMongoClient: true }) .

Si realmente desea evitar la advertencia, evite la versión 4.11.0.

Actualicé a la versión 4.11.1 y como @ types / mongoose @ 4.7.18 aún no están actualizados y no mencionan el campo useMongoClient en ConnectionOptions , así es como useMongoClient el módulo:

const Mongoose = require(''mongoose'');

Y luego usó esta función:

private connectDatabase(databaseUri: string): Promise<any> { return Mongoose.connect(databaseUri, { useMongoClient: true }) .then(() => { console.log(''Connected to MongoDB at '', databaseUri); return Mongoose.connection; }) .catch(err => debug(`Database connection error: ${err.message}`)); }


var mongoose = require(''mongoose''); mongoose.connect(''mongodb://localhost/starbucks'', { useMongoClient: true }); var db = mongoose.connection; db.on(''error'', console.error.bind(console, ''connection error:'')); db.once(''openUri'', function() { // we''re connected! });