Estoy intentando rellenar un modelo con datos de otro modelo. Esos dos modelos se ven así:
var postSchema = mongoose.Schema({
_comments: { type: mongoose.Schema.Types.ObjectId, ref: 'Comment' },
type: String,
body: String,
});
var commentSchema = mongoose.Schema({
id_post: mongoose.Schema.Types.ObjectId,
body: String,
});
Quiero encontrar todos posts
y poblarlos con los comments
que tienen id_post
== _id
de Publicaciones fundadas. Algo como esto:
Post.find({}).populate({
path: '_comments',
select: 'body',
match: { post_id: Post._id }
options: { limit: 5 }
})
.exec(function (err, posts){...});
En primer lugar, hay algunos problemas en el código que escribió. Si cada publicación puede tener muchos comentarios, debe implementar una relación de uno a muchos entre sus esquemas, puede hacerlo rodeando la referencia del comentario con []
var postSchema = mongoose.Schema({
_comments: [ {type: mongoose.Schema.Types.ObjectId, ref: 'Comment'} ] ,
type: String,
body: String,
});
id_post no es solo un campo de tipo ObjectId, debe escribirse así:
var commentSchema = mongoose.Schema({
post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' },
body: String,
});
Al guardar un nuevo comentario, asegúrese de conectarlo a su publicación:
var comment = new Comment({
body: "Hello",
post: post._id // assign the _id from the post
});
comment.save(function (err) {
if (err) return handleError(err);
// thats it!
});
Ahora, cuando desee encontrar una publicación y completar sus comentarios, debe escribir algo como esto:
Post
.find(...)
.populate({
path: '_comments',
select: 'body',
options: { limit: 5 }
})
.exec()
La razón por la que eliminé la coincidencia es que la coincidencia debe usarse cuando desee filtrar de acuerdo con un campo específico, en su caso, puede usar la coincidencia para obtener solo comentarios con el tipo = 'algo'.
rellenar debería funcionar porque cuando insertó el comentario hizo el vínculo a su publicación.
Puede encontrar más información sobre la forma correcta de usar rellenar aquí - Mongoose Query Population
Los datos de la publicación deben conservarse de la siguiente manera:
{
body: "some body",
type: "some type",
_comments: [12346789, 234567890, ...]
}
Más información sobre la forma en que se conservará la referencia aquí - Relaciones uno a varios con referencias de documentos
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras