Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
Mongodb base de datos.confusión de colección

Creé un proyecto MEAN en heroku.
En MongoDB tengo una DB/Colección como esta:
db == content / collection == android_main
Verifiqué que la colección está en la base de datos adecuada (y no en el administrador) a través del siguiente intercambio de MongoSH:

 Atlas atlas-xxxxxx-shard-0 [primary] content> use admin switched to db admin Atlas atlas-xxxxxx-shard-0 [primary] admin> show collections Atlas atlas-xxxxxx-shard-0 [primary] admin> use content switched to db content Atlas atlas-xxxxxx-shard-0 [primary] content> show collections android_main

En MongoDB también tengo un usuario con privilegios específicos para leer esta db/colección.
ingrese la descripción de la imagen aquí

En el código (Node.js) utilizo la siguiente cadena de conexión:
mongodb+srv://<USER>:<PASS>@<MONGO URL>/content?retryWrites=true&w=majority
La conexión se completa con éxito. Paso al usuario que mencioné anteriormente, por ejemplo, el usuario con solo los privilegios de lectura específicos en la base de datos (contenido) y la colección (android_main).
En el código, el mecanismo que uso para obtener la variable de la database de datos a través de la conexión y la cadena de conexión específicamente es:

 mongodb.MongoClient.connect(process.env.MONGODB_URI, function (err, database) {

Ahora, en el código, en respuesta a un `HTTP GET` emito lo siguiente:
 db.collection("android_main").find({}).toArray(function(err, docs) { ... }

me devuelve este error:
ERROR: user is not allowed to do action [find] on [admin.android_main]

Pregunta: ¿cómo puedo modificar mi código o configuración para garantizar que la llamada db.collection.find() haga referencia a la base de datos adecuada? Hubiera pensado que esto se solucionó en la conexión, donde la base de datos se llama explícitamente.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Voy a publicar la siguiente respuesta que resuelve el problema anterior. Lo encontré simplemente jugando con ideas aleatorias. Me gustaría agradecer a Heroku y su patética documentación por convertir una tarea de 30 minutos en un calvario de 3 días.

 client.connect( process.env.MONGODB_URI, function (err, database) { console.log("CONNECT..."); if (err) { console.log(err); process.exit(1); } db = database.db(DATABASE); var server = app.listen(process.env.PORT || 8080, function () { var port = server.address().port; console.log("CONNECT App now running on port", port); } ); console.log("CONNECT Done."); } );

Aparentemente, para configurar correctamente la variable db (la que usará en las consultas más adelante), debe tener en cuenta que la base de database que recibe en la devolución de llamada de conexión es la base de datos de administración (la que se usó para la autenticación), y a partir de eso hace la solicitud db() que pasa en la base de datos que pretende usar. Todo esto es completamente redundante porque pasamos la base de datos que pretendemos usar en la cadena de conexión. Qué completo CF; pero ciertamente no es el primero.
Disfrutar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda