2011-08-02 9 views
5

He siguientes: 2 modelos entidad¿Cómo consultar elementos de colecciones anidadas en Raven DB?

 public class Store : IModel 
     { 
     public string Id { get; set; } 
     public string Name { get; set; } 
     public string MainPageUrl { get; set; } 
     public ICollection<Product> Products { get; set; } 

     } 

     public class Product : IModel { 
      public string Id { get; set; } 
      public string Name { get; set; } 
      public double Price { get; set; } 
     public DateTime Created { get; set; } 
} 

y de éstos tienda es un documento en mi Db Raven. Necesito crear un índice donde pueda consultar productos por Nombre y el resultado debe ser parcial Almacenar documentos que contengan solo productos coincidentes.

Para ser específico, tengo que preguntarle a Raven Db esto: qué tiendas tienen productos que contienen este texto, y cuáles son esos productos en cada tienda.

Ahora puedo hacer un índice que me dé documentos de la tienda con productos que coincidan pero siempre me da TODOS los productos en esos documentos.

Supongo que es una respuesta fácil, pero al ser nuevo en Raven Db y en las bases de datos de documentos, no pude hacer que esto funcionara.

Ya hay casi un question duplicado aquí, pero todavía no pude hacer que la consulta/índice funcionen.

Respuesta

6

mula, que se espera, un almacén de documentos en su modelo contiene todos sus productos, y si usted está pidiendo un almacén de documentos, que obtendrá la completa almacén de documentos. Si desea obtener sólo una proyección hacia atrás por tan sólo las cosas que desea, puede utilizar el siguiente índice:

from store in docs.Stores 
from product in store.Products 
select new { product.Name, product.Price, product.Created, store.Id } 

Marca Nombre, Precio, Creado y Id como se almacena.

A continuación, ejecute la siguiente consulta.

session.Query<StoreProduct>() 
    .Where(s=>s.Name == name) 
    .AsProjection<StoreProduct>() 
    .ToList(); 

Eso le dará solo los productos correspondientes.

+0

Como pensaba, estaba siendo demasiado impreciso con mi pregunta de ayer. Lo siento Ayende, tenía prisa. Edité la pregunta para que sea más específica ahora. –

+0

Discusión relevante de 'AsProjection' en los foros de RavenDB https://groups.google.com/forum/#!topic/ravendb/PjRTcrLKcCE –

Cuestiones relacionadas