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

267
Vistas
¿Cómo puedo obtener datos de un objeto db que es la identificación de la tienda de otro db en mongoDB?

hola, no obtengo datos de un objeto DB que almacena la identificación de otro DBS, en realidad, este es un sitio web de blog, por lo que publico comentarios y actúo como comentarios, pero hay problemas. Obtengo los mismos comentarios en todas las publicaciones, pero quiere, cada publicación debe tener su propio comentario. aquí está el esquema de publicación

 const blogSchema = new mongoose.Schema({ title: String , content: String, image:{data: Buffer,contentType: String}, comment:[ { type:mongoose.Schema.Types.ObjectId, ref:'Comment' } ] });

aquí está el esquema de comentarios

 var commentSchema = new mongoose.Schema({ name:{ type:String, required: "this field is required" }, comment:{ type:String, required:"this filed is required" }, blog:{ type:mongoose.Schema.Types.ObjectId, ref: 'Blog' } },{ timestamps: true })

enrutador node js que recibe una publicación pero no un comentario

 pp.get("/post/:postname",(req,res)=>{ // const requesttitle = _.lowerCase(req.params.postname); const requesttitle = req.params.postname; Blog.findOne({_id: requesttitle} ,(err ,got)=>{ if(err){ console.log(err) }else{ const data= got.comment.find({}) console.log(data) res.render('post',{post:got }); } })

})

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

0

Creo que el problema radica en tu esquema. En su blogSchema tiene referencias a muchos documentos de Comment , y en su commentSchema tiene una referencia a un solo "Blog" ( sugiero no llamarlo "blog" sino "publicar" ya que eso es lo que es ). Esta referencia duplicada no es necesaria en la mayoría de los casos.

Dado que en su configuración, un solo comentario solo puede ser un elemento secundario de una publicación específica, esta sería la referencia que elegiría. El documento de publicación en sí no necesita saber directamente qué comentarios se incluyen, ya que esa información ya se encuentra en el documento de comentarios.

Para su publicación , sugeriría el siguiente esquema:

  Post Schema const postSchema = new mongoose.Schema({ title: String , content: String, image: { data: Buffer, contentType: String } });

Para su comentario , sugeriría el siguiente esquema:

 // Comment Schema const commentSchema = new mongoose.Schema({ name: { type: String, required: "this field is required" }, comment: { type: String, required: "this filed is required" }, post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' } });

Ahora, seguro que el siguiente paso depende de que toda su parte frontal esté configurada, pero tener esquemas como este le permitiría hacer algo como:

 pp.get("/post/:id", async (req,res) => { const id = req.params.id; const post = await Post.findOne({ _id: id }); const comments = await Comment.find({ post: id }); res.render('post', { post: post, comments: comments }); });

ventajas

  • la relación unidireccional significa menos trabajo si se crea o elimina un comentario.

  • posibilidad de obtener comentarios y/o publicaciones o ambos en una llamada api.

Contras

  • Requiere 2 llamadas a la base de datos si se solicitan publicaciones y comentarios.


Alternativa: Subdocumentos

Como alternativa al uso de Documentos referenciados, puede usar Subdocumentos .

Para su commentSchema , eso significa que no necesitará crear un Modelo separado a partir de él. Sin embargo, su postSchema debería verse así:

 const commentSchema = new mongoose.Schema({ message : { type : String } }); const postSchema = new mongoose.Schema({ comments : [commentSchema] });

👆 Esto incluiría de forma predeterminada todos los comentarios de la publicación si recupera la publicación de la base de datos. Sin embargo, también requeriría un código diferente para interactuar con esos comentarios (agregar, eliminar, ...) pero puede leer sobre esto en los documentos, estoy seguro.

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