Tôi có tài liệu gọi là Reservation sau:Làm thế nào để truy vấn thông tin lồng nhau trong 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"
}
Bên cạnh đó tôi đã lớp chiếu sau:
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; }
}
Những loại chỉ số và truy vấn để tôi viết nếu tôi muốn tìm phù hợp với ReservationItemProjections ? Ví dụ .:
// invalid example query:
var matches = docs.Query<ReservationItemProjection,
ReservationItemProjectionsIndex>()
.Where(x =>
x.EmployeeId == "employees/1" &&
x.StartTime >= minTime &&
x.EndTime <= maxTime)
.ToList();
Xin lưu ý, rằng tôi không muốn để có được một danh sách các tài liệu Reservation nhưng một danh sách các đối tượng ReservationItemProjection. documentation nói:
Nhưng khi chỉ nhận được tài liệu phù hợp với truy vấn cụ thể là hữu ích, chúng tôi có thể làm tốt hơn thế. Thay vì tự nhận tài liệu, tôi muốn lấy các giá trị trực tiếp từ chỉ mục mà không nhận được tài liệu đầy đủ.
Tôi đã cố gắng sử dụng một chỉ số như thế này:
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);
}
}
Bằng cách nào đó tôi không thể nhận các truy vấn và chỉ số làm việc: nó hoặc ném một ngoại lệ về không thể đúc từ ReservationItemProjection để Đặt trước hoặc, khi tôi có thể nhận các đối tượng ReservationItemProjection, chúng sẽ có bao gồm tất cả các mục trong tất cả các đặt chỗ thậm chí có một mục phù hợp, thậm chí mặc dù truy vấn của tôi có nhân viên x.EmployeeId == "ở đâu đó/1 ".
Tóm tắt: chỉ số được yêu cầu là gì? Liệu chỉ mục chỉ cần một mệnh đề Map hay cũng là Reduce hoặc TransformResults? Làm cách nào để viết truy vấn trong C#?
này đã chính xác kết quả tôi đang tìm kiếm cho! AsProjection có được coi là một tính năng nâng cao không? Google chỉ trả về hai trang kết quả trên [ravendb AsProjection] (http://www.google.com/search?q=ravendb+asprojection). Có vẻ như tính năng này cần một số tài liệu? –
Cảm ơn, câu trả lời này đã cứu mạng tôi hôm nay! –