Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

356
Views
Mongo findById() solo funciona a veces incluso cuando se pasa una identificación válida

Tengo un problema extraño al consultar una colección de Mongo DB. Estoy usando findById() para obtener un solo elemento que funcione algunas veces y otras no.

Verifiqué la identificación que se pasa a la ruta del servidor y, en todos los casos, coincide perfectamente con el documento de destino en la colección.

Aquí está el código básico:

 router.get("/:postId", async (req, res) => { console.log('id : ', req.params.postId) console.log('type: ', typeof(req.params.postId)) // id is a string try { const post = await Post.findById(req.params.postId).exec(); console.log('post :', post) // sometimes null res.json(post); } catch (err) { res.json({ message: err }); } });

En la ruta anterior, solo se encontrarán ciertas publicaciones, mientras que otras volverán null . Esto sucede independientemente de si la identificación pasada es correcta y si el documento existe con la identificación exacta.

Si alguien tiene alguna idea sobre lo que podría estar yendo mal aquí, ¡agradecería mucho la ayuda!

EDITAR

He hecho más depuración y creo que tiene algo que ver con el modelo Schema for the Post.

Por ejemplo, este objeto se encontrará:

 { "tags": ["foo"], "_id": "8394839483fhg020834903", "title": "bar", "content": "baz", "isPrivate": true, }

Pero este no lo hará debido a la falta de propiedad isPrivate .

 { "tags": [], "_id": "5e0fdc631ef5c46b285a4734", "title": "New post", "content": "Some content here", }

He probado esto en múltiples consultas y parece ser la raíz del problema.

he intentado agregar

 isPrivate: { required: false }

Para el esquema, pero no parece resolver el problema.

Aquí está el esquema completo

 const postSchema = mongoose.Schema({ title: { type: String, required: true }, content: { type: String, required: true }, tags: [{ type: String }], date: { type: Date, default: Date.now }, isPrivate: { type: Boolean required: false } });

No soy un experto en Mongo/Mangoose, por lo que agradecería mucho cualquier orientación.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Si la identificación de la publicación coincide con algún registro, devolverá datos; de lo contrario, devolverá un valor nulo. Deberías manejar la excepción.

 router.get("/:postId", async (req, res) => { try { const post = await Post.findById(req.params.postId).exec(); if(post) { return res.json(post); } res.json({ message:'No Post found' }); } catch (err) { res.json({ message: err }); } });

Puede verificar manualmente si existe un registro con una identificación de publicación. Puede usar MongoDB Compass para la interfaz gráfica de usuario para navegar por el registro

about 4 years ago · Juan Pablo Isaza Report

0

Creo que el problema podría ser con su _id según el estándar de mongo _id debe ser una cadena de 12 bytes o una cadena de 24 caracteres hexadecimales.

Podemos verificar si el _id es válido usando mongoose.isValidObjectId()

Ejecuté esta verificación en los objetos que publicaste y, de hecho, 1 no es válido mientras que el otro es válido

 const mongoose = require('mongoose'); console.log(`is '8394839483fhg020834903' valid - ${mongoose.isValidObjectId('8394839483fhg020834903')}`); console.log(`is '5e0fdc631ef5c46b285a4734' valid - ${mongoose.isValidObjectId('5e0fdc631ef5c46b285a4734')}`);

Me da Válido inválido

Deberá verificar qué está modificando su ID en el código, también puede cargar su esquema para obtener una mejor comprensión.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!