Así que estoy usando TypeScript para construir un servidor express
usando mongoose
para interactuar con MongoDB Atlas
. Recientemente, decidí usar varias bases de datos dentro de mi aplicación y cambiar mis esquemas para acomodar esta nueva "arquitectura". Sin embargo, al hacerlo, apareció una deprecation warning
:
(nodo: 2096) DeprecationWarning: collection.ensureIndex está en desuso. Utilice createIndexes en su lugar. (Use
node --trace-deprecation ...
para mostrar dónde se creó la advertencia)
Ya he señalado dónde está ocurriendo el error. Sucede cuando asigno el esquema a un modelo de mangosta.
Código de implementación donde ocurre el error:
const db = mongoose.connection.useDb("Authentication"); const User = db.model<UserInterface>("User", UserSchema);
Código de implementación donde NO ocurre el error:
const User = mongoose.model<UserInterface>("User", UserSchema);
Aquí está mi lógica de conexión a mongodb:
import mongoose from "mongoose"; async function connect() { try { const uri = <string>process.env.MONGO_URI; await mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, }); console.log("MongoDB Connected..."); return; } catch (err) { process.exit(1); } } export default connect;
Como puede ver, ya tengo useCreateIndex: true
, por lo que no sé por qué ocurre el error. El error desaparece cuando agrego esto al esquema, pero no creo que sea una buena solución:
{ timestamps: true, autoIndex: false }
Entonces, ¿qué estoy haciendo mal aquí? ¡Gracias!
Ok, parece que la solución fue usar mongoose.set(...)
antes de usar mongoose.connect(...)
. Así que esto hizo que desapareciera mi advertencia de desaprobación:
import mongoose from "mongoose"; async function connect() { try { const uri = <string>process.env.MONGO_URI; mongoose.set("useNewUrlParser", true); mongoose.set("useUnifiedTopology", true); mongoose.set("useCreateIndex", true); mongoose.set("useFindAndModify", false); await mongoose.connect(uri); console.log("MongoDB Connected..."); return; } catch (err) { process.exit(1); } } export default connect;
Siempre vi a otros configurar estas opciones dentro de la función de conexión, por lo que nunca supe sobre la función de configuración.