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

194
Vistas
El comportamiento de búsqueda de Mongoose por entradas de matriz ($in) no está alineado con MongoDB Atlas

Estoy ejecutando un servidor Node.js, conectándome a una base de datos MongoDB con mongoose. Dentro de mi controlador, tengo varios métodos que realizan operaciones en la base de datos. Uno de ellos es este:

 async findMultiple(req, res) { const [baseSkillsArray] = Array(req.body); try { // if there is not baseSkillsArray, skip if (!baseSkillsArray) { return res.status(200).send([]); } // find all baseSkills using the ids in the baseSkillsArray const allBaseSkills = await BaseSkill.find({ _id: { $in: [baseSkillsArray.baseSkillArray] } // }); console.log('test ' + allBaseSkills); res.status(200).send(allBaseSkills); } catch (error) { console.error(error.message); res.status(500).send('Server error find BaseSkills'); } }

Sin embargo, esto no me devuelve nada. Hice un poco de depuración y descubrí que el motivo es el id de búsqueda $in la matriz. Así que intenté codificar un valor, como '2', por ejemplo.

 // find all baseSkills using the ids in the baseSkillsArray const allBaseSkills = await BaseSkill.find({ _id: { $in: ['2'] } });

Sin éxito. Así que fui a MongoDB Atlas, donde se almacena mi base de datos. Intenté filtrar usando la misma línea de código en mis colecciones.

 { _id: { $in: ['2'] } }

¡Sorprendentemente, me devuelve el documento como yo quería!

El problema es que necesito que funcione con mangosta. ¿Algunas ideas? ¿Es esto un error conocido?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No hay nada malo con la consulta, ni un error con respecto $in .

De hecho, lo que está mal es el nombre real de la colección. Creé manualmente una colección en MongoDB Atlas, llamada "baseSkills". Sin embargo, mongoose por defecto transforma el nombre de su colección en minúsculas y agrega una "s" si el nombre de su colección no está en plural.

Entonces, cada vez que iniciaba mi servidor, notaba que había una nueva colección llamada "baseskills". Supuse que era un error y lo eliminé. Solo después de hacer esta publicación me di cuenta de que la colección estaba allí nuevamente .

Así que exporté los documentos a esta colección y mi consulta funcionó bien.

FYI, hay una manera de hacer cumplir el nombre de la colección en mangosta. Cuando declare su modelo, agregue un segundo parámetro a la función Schema llamado "colección". Aquí hay un ejemplo:

 const BaseSkillSchema = new mongoose.Schema({ _id: { type: String, required: true }, ... }, { collection: 'baseSkills' })

¡Eso es todo! Perdona por el lío y gracias por tu ayuda!

about 4 years ago · Santiago Trujillo Denunciar

0

desea consultar los identificadores de objetos de mongo db. Por lo tanto, debe crear un nuevo ObjectId para hacer eso.

 import {Types} from 'mongoose'; { _id: { $in: [new Types.Object("2")] } }

O si tiene 2 ID, uno generado y uno personalizado creado como id , puede consultar sin crear un nuevo objeto.

 { id: { $in: ['2'] } }
about 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