Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

195
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda