Filtrar documentos incrustados en MongoDB

Tengo problemas para entender cómo filtrar documentos incrustados en MongoDB, y estoy empezando a pensar que debería estar utilizando una asociación relacional, pero eso parece estar mal en el contexto de la tienda de documentos.

Siguiendo con un sistema típico de blog / comentario, tengo una colección de blogs , y cada blog tiene muchos comments . Los comentarios se almacenan como documentos integrados dentro del documento del blog.

Filtrar mi colección de blogs es muy sencillo, pero para filtrar mis comments incrustados en cada blog , tengo que cargarlos todos en la memoria (recuperarlos en una matriz de Ruby) y recorrer cada comentario, y devolver los que coincidan. un criterio específico.

Mis esfuerzos para filtrar documentos incrustados mediante notación de puntos están fallando y devuelven todos los documentos secundarios.

¿Hay alguna forma mejor de que MongoDB filtre estos datos por mí o debería resignarme a las asociaciones relacionales? (Retirar todos los documentos incrustados y el filtrado manual va a ser muy intenso a largo plazo)

Actualmente no hay forma de filtrar en los documentos incrustados en la forma que está describiendo. El uso de la notación de puntos le permite hacer coincidir en un documento incrustado, pero el documento completo, principal y todo, seguirá siendo devuelto. También es posible seleccionar qué campos se devolverán, pero eso tampoco ayuda a tu caso.

Tenemos un caso de “colecciones virtuales”, que implementaría la funcionalidad deseada; siéntete libre de votar sobre esto:

http://jira.mongodb.org/browse/SERVER-142

Mientras tanto, probablemente debería tratar los comentarios como su propia colección. En general, si necesita trabajar con un conjunto de datos dado por sí mismo, conviértalo en una colección. Si se concibe mejor como parte de otro conjunto, es mejor incrustarlo.