Tengo una colección de publicaciones, cada una de las cuales se parece a esto:
{Post: [ id: 'post_id', postedBy: 'user_id', likes: [0: id: 'user_id', 1: id: 'user_id'], content: 'text here', comments: [0: {id: 'comment_id', text: 'text here', postedBy: 'user_id'}, 1: {id: 'comment_id', text: 'text here', postedBy: 'user_id'] image: {url: 'image url here'} ], [ id: 'post_id', postedBy: 'user_id', likes: [0: id: 'user_id', 1: id: 'user_id'], content: 'text here', comments: [0: {id: 'comment_id', text: 'text here', postedBy: 'user_id'}, 1: {id: 'comment_id', text: 'text here', postedBy: 'user_id'] image: {url: 'image url here'} ], }Quiero poder encontrar todos los comentarios creados por un usuario específico, en todas las publicaciones.
Sé que puedo encontrar publicaciones creadas por un usuario específico haciendo algo como:
const post = await Post.find({ postedBy: some user_id });También sé que si supiera el índice del comentario que estaba buscando podría hacer algo como:
const comment = await Post.find({ comments[0].postedBy: some user_id })Pero estoy luchando para averiguar cómo puedo recorrer una matriz anidada de objetos indexados como este para encontrar los datos que necesito. AIT
De los documentos descubrí el operador $elemMatch y con esto pude acceder a todas las publicaciones que contenían un comentario escrito por un usuario específico como este:
const posts = await Post.find({ comments: { $elemMatch: { postedBy: user_id } }, });Luego podría mapear a través de la matriz devuelta para acceder a los comentarios de esta manera:
const comments = posts.map((item) => item.comments);Espero que esto pueda ayudar a alguien más algún día.