2010-01-26 16 views
27

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.Filtrar documentos incrustados en MongoDB

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.

Es muy simple para filtrar mi colección blogs, pero con el fin de filtrar mi comments incorporado en cada blog, estoy teniendo que cargar todo en la memoria (recuperar todos en una matriz de Rubí), y el bucle a través de cada comentario, los que regresan que coinciden con un criterio específico.

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

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

Respuesta

22

Actualmente no hay forma de filtrar en los documentos incrustados de la manera 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; siente libre de votar en ella:

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

Mientras tanto, probablemente debería tratar a 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.

+0

Gracias kb: he ido con la colección por su cuenta, parece estar funcionando bien hasta el momento; Solo necesito probarlo un poco. – kez

+0

Cool. Debería ser eficiente. –

+13

¿No son las "colecciones virtuales" una gran exageración para este requisito tan necesario? Solo tengo curiosidad: ¿la capacidad de devolver solo un documento incrustado específico no se está desarrollando porque no es necesario o porque es complicado? – idophir

Cuestiones relacionadas