Tengo el siguiente documento denominado Reserva:¿Cómo consultar información anidada en RavenDB?
{
"CustomerId": 1,
"Items": [
{
"EmployeeId": "employees/1",
"StartTime": "2011-08-15T07:20:00.0000000+03:00",
"EndTime": "2011-08-15T07:40:00.0000000+03:00"
},
{
"EmployeeId": "employees/1",
"StartTime": "2011-08-15T07:40:00.0000000+03:00",
"EndTime": "2011-08-15T09:10:00.0000000+03:00"
},
{
"EmployeeId": "employees/3",
"StartTime": "2011-08-16T07:20:00.0000000+03:00",
"EndTime": "2011-08-16T11:35:00.0000000+03:00"
}
]
"ReservedAt": "2011-10-20T15:28:21.9941878+03:00"
}
Además Tengo la siguiente clase de proyección:
public class ReservationItemProjection
{
public string ReservationId { get; set; }
public string CustomerId { get; set; }
public string EmployeeId { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}
¿Qué tipo de índice y consulta qué escribo si quiero encontrar los correspondientes ReservationItemProjections ? Ej .:
// invalid example query:
var matches = docs.Query<ReservationItemProjection,
ReservationItemProjectionsIndex>()
.Where(x =>
x.EmployeeId == "employees/1" &&
x.StartTime >= minTime &&
x.EndTime <= maxTime)
.ToList();
Tenga en cuenta, que no deseo para obtener una lista de los documentos de reserva, pero una lista de objetos ReservationItemProjection . El documentation dice:
Pero mientras que sólo conseguir los documentos que coincidan con una consulta en particular es útil, podemos hacer algo mejor que eso. En lugar de obtener los documentos ellos mismos, quiero obtener los valores directamente del índice, sin obtener el documento completo.
que ya han intentado usar un índice de esta manera:
public class ReservationItemProjectionsIndex :
AbstractIndexCreationTask<Reservation, ReservationItemProjection>
{
public ReservationItemProjectionsIndex()
{
Map = reservations =>
from reservation in reservations
from item in reservation.Items
select new
{
ReservationId = reservation.Id,
CustomerId = reservation.CustomerId,
item.EmployeeId,
item.StartTime,
item.EndTime
};
Store(x => x.ReservationId, FieldStorage.Yes);
Store(x => x.CustomerId, FieldStorage.Yes);
Store(x => x.EmployeeId, FieldStorage.Yes);
Store(x => x.StartTime, FieldStorage.Yes);
Store(x => x.EndTime, FieldStorage.Yes);
}
}
De alguna manera no puede obtener la consulta y el índice de trabajo: o bien se produce una excepción sobre no ser capaz de lanzar a partir de ReservationItemProjection Reserva o, cuando yo he podido obtener los objetos ReservationItemProjection, tendrán incluidos todos los artículos en todas las reservas que tengan incluso un elemento coincidente, incluso aunque mi consulta tiene la cláusula Where-x.EmployeeId == "employees/1 ".
Resumen: ¿Cuál es el índice requerido? ¿El índice solo necesita una cláusula Map o también Reduce o TransformResults? ¿Cómo escribo la consulta en C#?
Esto dio exactamente el resultado que estaba buscando ¡para! ¿AsProjection se considera una función avanzada? Google solo devuelve dos páginas de resultados en [ravendb AsProjection] (http://www.google.com/search?q=ravendb+asprojection). Parece que la característica necesitaría algo de documentación? –
Gracias, esta respuesta salve mi vida hoy! –